通过url从图片服务器下载图片到浏览器(图片下载)下载图片而不是打开图片
一、需求:平时写图片下载功能,只需要前台页面写download标签就可以实现图片的下载,本次项目遇到的问题是,由于搭建了图片服务器,请求图片URL的时候获取不到请求头,浏览器无法识别图片是文件,导致点击下载,浏览器会打开图片.
二、解决:既然浏览器获取不到请求头,考虑到的最简单的解决方式是通过后台下载,向图片服务器发送请求头.
【通过url从图片服务器下载图片到浏览器(图片下载)下载图片而不是打开图片】考虑到下载图片使用频繁,所以把下载图片封装为通用方法,代码如下:
实现步骤:
1.前台向后台发送图片url
2.通过url获取图片流
3.设置输出头
4.把图片输出到浏览器(不是写死图片地址)
/**
* 图片下载
* @param fileUrl
* @param response
*/
@ApiOperation(value = "https://www.it610.com/article/|uploadQianURL|图片下载")
@GetMapping("/uploadQianURL")
public voiduploadQianURL(String fileUrl,HttpServletResponse response) {fileUrl = fileUrl.replace("\\", "/");
//获取文件名,文件名实际上在URL中可以找到
String[] strs=fileUrl.split("/");
String fileName = strs[strs.length - 1].toString();
try {
URL url = new URL(fileUrl);
/*将网络资源地址传给,即赋值给url*/
/*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
DataInputStream in = new DataInputStream(connection.getInputStream());
ServletOutputStream out=response.getOutputStream();
response.setContentType("multipart/form-data");
//获取当前超链接中文件的名字
response.addHeader("Content-Disposition","attachment;
filename="+ new String(fileName.getBytes("GB2312"), "ISO8859-1"));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
byte[] context=output.toByteArray();
out.write(output.toByteArray());
in.close();
out.close();
connection.disconnect();
} catch (Exception e) {}
}
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 一个人的碎碎念
- 我从来不做坏事
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- 西湖游
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error
- 改变自己,先从自我反思开始
- leetcode|leetcode 92. 反转链表 II
- 从我的第一张健身卡谈传统健身房
- 自媒体形势分析