首先要将标准的base64码通过post请求传入后台,为什么要使用POST呢?base64大图的码长度可以自己看看
先看代码
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
public FileItem base64ToImage(String imgStr) {
// 对字节数组字符串进行Base64解码并生成图片
try {
// Base64解码
byte[] b = Base64.decodeBase64(imgStr);
for (int i = 0; i < b.length; ++i) {
// 调整异常数据
if (b[i] < 0) {
b[i] += 256;
}
}
InputStream inputStream = new ByteArrayInputStream(b);
File tmpFile = FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), ".jpg");
return createFileItem(tmpFile, tmpFile.getName());
} catch (Exception e) {
log.error("文件上传失败{}", e);
return null;
}
}
/*
* 创建FileItem
*/
private FileItem createFileItem(File file, String fieldName) {
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem item = factory.createItem(fieldName, "text/plain", true, file.getName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
try {
FileInputStream fis = new FileInputStream(file);
OutputStream os = item.getOutputStream();
while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return item;
}
当然这个并没有写入本地,这个是为了将文件转为流,再通过表单提交方式提交到图片服务器。