1.将字节数组转换MultipartFile上传对象
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
2.具体方法
public String getZxPictureNameNew2(String pictureLinkUrl,String fileName) {
log.info("start download ! pictureLinkUrl:{}", pictureLinkUrl);
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
String uploadUrl = "";
try {
// 统一资源
URL url = new URL(pictureLinkUrl);
// 连接类的父类,抽象类
URLConnection urlConnection = url.openConnection();
// http的连接类
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
//设置超时
httpURLConnection.setConnectTimeout(1000 * 5);
//设置请求方式,默认是GET
httpURLConnection.setRequestMethod("GET");
// 设置字符编码
httpURLConnection.setRequestProperty("Charset", "UTF-8");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.connect();
//获取原始文件名
// String fileName = pictureLinkUrl.substring(pictureLinkUrl.lastIndexOf("/") + 1)+".png";
BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int size = 0;
byte[] buf = new byte[2048];
while ((size = bin.read(buf)) != -1) {
bos.write(buf, 0, size);
}
byte[] bytes = bos.toByteArray();
// 字节数组转MultipartFile !!!!!
InputStream inputStream2 = new ByteArrayInputStream(bytes);
MultipartFile multipartFile = new MockMultipartFile("__init__.py", fileName, "application/octet-stream", inputStream2);
uploadUrl = fastDfsService.upload(multipartFile, "super");
} catch (Exception e) {
log.error("下载第三方资讯图链接错误,======{}", e);
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (Exception e) {
log.error("close inputStream error===={}", e);
}
}
return uploadUrl;
}
3.上传接口
public String upload(MultipartFile file, String uploadName) throws IOException {
HttpHeaders fileHeader = new HttpHeaders();
fileHeader.setContentType(MediaType.parseMediaType(Objects.requireNonNull(file.getContentType())));
fileHeader.setContentDispositionFormData("file", file.getOriginalFilename());
HttpEntity<ByteArrayResource> fileEntity = new HttpEntity<>(new ByteArrayResource(file.getBytes()), fileHeader);
HttpHeaders headers = this.getBaseHeaders();
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
paramMap.set("file", fileEntity);
JSONObject resultVo = RestTemplateUtils.remoteForm(headers, paramMap, this.getCdnUploadUrl(uploadName), JSONObject.class);
Assert.isFalse(resultVo.getInteger("errorCode") != CommonConstant.SUCCESS_CODE, String.format("上传文件失败,%s", resultVo.getString("errorInfo")));
return resultVo.getString("data");
}