admin管理员组文章数量:1533913
如何通过Java下载远程文件到浏览器
-
整体思路:
首先获取远程资源的文件输入流,使用HttpServletResponse的输出流,通过Java io转换将输入流转成输出流,写入指定文件,下载到浏览器端。 -
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片下载</title>
</head>
<body>
<a id="downloadFileFromRemote" url="${url!}" fileSize="${fileSize!}" href="">文件下载</a>
</body>
</html>
```javascript
<script>
//a标签的点击事件
$("#downloadFileFromRemote").on("click",function(){
//获取a标签上参数值
var url=$(this).attr("url");
var fileSize=$(this).attr("fileSize");
//方法一:该请求是get请求,当网络或远程图片url太长会被截断,需要使用form表单post请求
$("#downloadFileFromRemote").attr("href","/getFile/downloadFileFromRemote?url="+url+"&fileSize="+fileSize)});
//方法二:组装form,post提交,url不会被截取
var form = $("<form>");
form.attr("style","display:none");
form.attr("method","post");
form.attr("action","/getFile/downloadFileFromRemote");
$("<body>").append(form);
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","url");
input1.attr("value",url);
form.append(input1);
var input2 = $("<input>");
input2.attr("type","hidden");
input2.attr("name","fileSize");
input1.attr("value",fileSize);
form.append(input2);
form.submit();
</script>
控制器:
@RequestMapping("/getFile/downloadFileFromRemote")
public void getFile(String url, String fileSize, HttpServletResponse response) throws IOException {
//生成随机文件名,这里指定下载jpg,可以从前端传入文件名,下载不同格式文件
String fileName = new Random(1000).toString();
fileName = fileName + ".jpg";
FileUtils.downloadFromCmit(fileName,url,fileSize,response);
}
下载工具类:
package com.xcwlkj.web.controller;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class FileUtils {
public static void downloadFromCmit(String fileName,String urlStr, String fileSize, HttpServletResponse response) throws IOException {
OutputStream out = null;
ByteArrayOutputStream bas = null;
InputStream is = null;
try {
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream; charset=utf-8");
String fileNam = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+fileNam);
out = response.getOutputStream();
URL url = new URL(urlStr);
int fileLen = Integer.parseInt(fileSize);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoOutput(false);
connection.setDoInput(true);
connection.setRequestMethod("GET");
connection.setUseCaches(true);
connection.setInstanceFollowRedirects(true);
connection. setConnectTimeout(3000);
connection.connect();
int code = connection.getResponseCode();
if(code==200){
is = connection.getInputStream();
byte[] b = new byte[1024];
bas = new ByteArrayOutputStream();
int len;
while((len=is.read(b))!=-1){
bas.write(b,0,len);
}
byte[] src = bas.toByteArray();
byte[] dest = new byte[fileLen];
System.arraycopy(src,0,dest,0,fileLen);
out.write(dest);
out.flush();
}
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
} finally {
//先关闭外层,后里层
out.close();
bas.close();
is.close();
}
}
}
版权声明:本文标题:如何通过Java下载远程文件到浏览器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1726114033a1055912.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论