在微信公众号开发中,为了处理图片压缩和上传兼容性,需要向后台提交base64格式的图片,然后还需要通过业务处理后上传到文件服务器。
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
MultipartFile mfile = new CommonsMultipartFile(base64ToImage(fileMap.get("imgStr").toString()));
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;
}