原因:服务器端接收的Android传过来的字符串时会把“+”替换成空格,加号(+)是BASE64编码的一部分,而加号在后台接收时被当成是空格。
处理办法是:解码前,先把空格替换成“+”
import sun.misc.BASE64Decoder;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
public class UploadImageByteArray {
public static String uploadImg(String base64String) {
try {
base64String = base64String.replace(" ", "+");
BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(base64String);
//生成图片名称
String imageUrl = UUID.randomUUID().toString().replace("-", "") + ".jpg";
String path = "f://";
for (int i = 0; i < bytes1.length; i++) {
if (bytes1[i] < 0) {
//调整异常数据
bytes1[i] += 256;
}
}
File file = new File(path, imageUrl);
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
out.write(bytes1);
out.flush();
out.close();
return imageUrl;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}