某业务图片不能直接上传到自己服务器,只能上传到第三方并返回图片url,但图片源文件自己也需要保存,所以需要通过url下载图片并上传至自己服务器
public static MultipartFile uploadImgUrlToMultipartFile(String url) {
byte[] bytes = downloadPicture(url);
String name = "imageFile" + url.substring(url.lastIndexOf("."));
MultipartFile multipartFile = getMultipartFile(name, bytes);
return multipartFile;
}
先将图片通过url下载转为二进制
//获取图片二进制
private static byte[] downloadPicture(String url) {
URL urlConnection = null;
HttpURLConnection httpURLConnection = null;
try {
urlConnection = new URL(url);
httpURLConnection = (HttpURLConnection) urlConnection.openConnection();
InputStream in = httpURLConnection.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream out = new ByteArrayOutputStream();
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.close();
out.close();
return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
httpURLConnection.disconnect();
}
return null;
}
二进制文件转换MultipartFile
//二进制文件转换MultipartFile
public static MultipartFile getMultipartFile(String name, byte[] bytes) {
MultipartFile mfile = null;
ByteArrayInputStream in = null;
try {
in = new ByteArrayInputStream(bytes);
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem fileItem = factory.createItem("mainFile", "text/plain", false, name);
IOUtils.copy(new ByteArrayInputStream(bytes), fileItem.getOutputStream());
mfile = new CommonsMultipartFile(fileItem);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
return mfile;
}