1.Java调用第三方接口获取文件流
public void downloadResultFile(HttpServletResponse response, HttpServletRequest request) throws Exception {
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, AesKey.getBytes());
String id = request.getParameter("id");//"IT7pPVCdYY%2BBTwmTU4%2B35A%3D%3D";
String token = request.getParameter("token");
String timeStamp = request.getParameter("timeStamp");
URL url = new URL('xxxx');//接口地址
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
final ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(conn.getInputStream(), output);
response.reset();
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", conn.getHeaderFields().get("Content-Disposition").get(0));
response.setHeader("Access-Control-Allow-Origin", "*");
response.setContentType("application/x-download");
byte[] buff = new byte[1024];
OutputStream os = response.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(output.toByteArray()));
int i;
while ((i = bis.read(buff)) != -1) {
os.write(buff, 0, i);
os.flush();
}
bis.close();
os.close();
conn.disconnect();
}
2.前端调用java接口 下载文件流
downloadResultFileApi({
timeStamp: AES.encrypt(time, passWord),
token: "c9z9jOEppZu2LL7pfaNarA==",
id: e.imgId,
}).then((res) => {
var blob = new Blob([res.data], {type: "image/png"});
var downloadElement = document.createElement("a");
var href = window.URL.createObjectURL(blob); // 创建下载的链接
downloadElement.href = href;
downloadElement.download =
decodeURI(res.headers["content-disposition"].split("filename=")[1]) ||""; // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); // 点击下载
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉blob对象
});
注:
blob文件流 type类型 需与文件类型一致;
export function downloadResultFileApi(data){
return service.request({
method: "get",
url: '/output/downloadResultFile',
params:data,
responseType: 'blob'
})
}
axios请求设置responseType:‘blob’