文件下载
指定<a>元素的download属性,该属性为文件被下载时的文件名
代码如下:
<a href="<%=path %>/upload/test.doc" download="测试文档">下载文档</a> <form action="testUpload" method="post" enctype="multipart/form-data"> <input type="hidden" name="fileName" value="logo.png"> <button>下载图片</button> </form>
创建一个InputStream到文件用于下载
查找MIME类型下载文件的内容
可以是application/pdf,text/html,application/xml,image/png等等
将内容类型与上述发现的MIME类型响应(HttpServletResponse)
respnse.setContentType(mimeType);
针对以上找到MIME类型设置内容长度
response.setContentLength(file..getLength());//length in bytes
为响应设置内容处理标头
response.setHeader("Content-Disposition","attachment;filename="+fileName);//随着附件文件将下载,可能会显示一个另存为基于浏览器的设置对话框
response.setHeader("Content-Disposition","inline;filename="+fileName);//通过内联浏览器将尝试显示内容到浏览器中(图片,PDF,文本....),对于其他内容类型,文件将直接下载
从InputStream中复制字节响应到OutputStream,一旦复制完成后,关闭输入输出流
代码:
@RequestMapping("/download")
public String downloadFile(@RequestParam("fileName") String fileName,
HttpServletRequest request, HttpServletResponse response) {
if (fileName != null) {
String realPath = request.getServletContext().getRealPath(
"/WEB-INF/File/");
File file = new File(realPath, fileName);
if (file.exists()) {
response.setContentType("application/force-download");// 设置强制下载不打开
response.setHeader("Content-Disposition","attachment; filename="+ fileName);
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return null;
}

浙公网安备 33010602011771号