以下内容来自 SpringMVC指南 203页
看到这个下载文件讲的不错,记录下!
为了将像文件这样的资源发送到浏览器,需要在控制器中完成以下工作:
1.对请求处理方法使用void返回类型,并在方法中添加HttpServletResponse参数。
2.将响应的内容类型设为文件的内容类型。Content-Type标题在某个实体的body中定义数据的类型,并包含媒体类型和子类型标识符。不清楚内容类型,并且希望浏览器始终显示Save As(另存为)对话框,则将它设为application/octet-seream。这个值是不区分大小写的。
3.添加一个名为Content-Disposition的HTTP响应标题,并赋值attachment;filename=fileName,这里的fileName是默认文件名,应该出现在File Download(文件下载)对话框中。它通常与文件同名,但是也并非一定如此。
例如,以下代码将一个文件发送到浏览器:
FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); byte[] bytes = new byte[bis.available()]; response.setContentType(contentType); OutputStream os = response.getOutputStream(); bis.read(bytes); os.write(bytes);
为了将文件发送到浏览器,首先读取文件作为FileInputStream,并将内容加载到字节数组,随后,获取HttpServletResponse的OutputStream,并调用其wirte方法传入字节数组。
将文件发送到HTTP客户端的更好方法是使用Java NIO的Files.copy()方法
Path file = Paths.get(...); Files.copy(file,response.getOutputStream());
代码更短,运行速度更快。