项目场景:
项目场景:对接第三方,需要将图片文件转换base64后传输给对方。其中图片存放的是oss文件存储id。
问题描述
java运行期间,根据获取到的链接地址下载文件
数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据,或者出现文件下载后不识别的问题:
httpConn.setRequestProperty(“Content-Type”, ContentType.APPLICATION_OCTET_STREAM.toString()); 这个是关键
public static String downLoadFileToBase64(final String outsideUrl) {
log.info("文件地址url:{}", outsideUrl);
InputStream inputStream = null;
try {
final URL url = new URL(outsideUrl);
final HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setUseCaches(false);
httpConn.setRequestProperty("Content-Type", ContentType.APPLICATION_OCTET_STREAM.toString());
httpConn.setRequestProperty("Accept-Charset", "utf-8");
// 获取返回数据
if (httpConn.getResponseCode() == HttpStatus.SC_OK) {
inputStream = httpConn.getInputStream();
} else {
throw new RuntimeException(BasicErrorCodeEnum.FAILED, "文件下载失败");
}
byte[] bytes = IOUtils.toByteArray(inputStream);
return Base64Util.encode(bytes);
} catch (Exception e) {
log.error("文件转换base64失败", e);
throw new RuntimeException("文件转换base64失败");
} finally {
if (Objects.nonNull(inputStream)) {
try {
inputStream.close();
} catch (IOException e) {
log.error("关闭inputStream失败", e);
}
}
}
}