一:其实pc端和手机端浏览器下载文件是一样的,以流的方式传输,只需要后端设置好response的参数信息即可。上代码。
public void downLoad(HttpServletRequest request, HttpServletResponse response){
try {
// 设置响应头和客户端保存文件名
response.setCharacterEncoding("utf-8");
//设置文件流下载方式
response.setContentType("application/octet-stream");
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); // firefox浏览器
} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
}else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// 谷歌
}
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 读取目标文件,通过response将目标文件写到客户端
// 读取文件
String url=path;
System.out.println(url);
InputStream in = new FileInputStream(url);
OutputStream out = response.getOutputStream();
// 写文件
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ps:
首先设置设置响应方式为流:
response.setContentType("application/octet-stream");
其次设置不同浏览器的编码格式
这样在浏览器中请求对应地址即可自动下载文件。