Springmvc中的文件下载与mime类型

文件下载示例

1
2
3
4
5
6
7
8
9
10
@RequestMapping("/downloadPDF")
public ResponseEntity<byte[]> downloadPDF() throws IOException {
//以PDF文件格式下载
HttpHeaders headers= new HttpHeaders();
String filename = "中文.pdf";
String downloadFileName=new String(filename.getBytes("UTF-8"),"ISO-8859-1"); // 1
headers.setContentDispositionFormData("attachment",downloadFileName); // 2
headers.setContentType((MediaType.parseMediaType("application/pdf")));// 3
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File("testpdf.pdf")),headers,HttpStatus.CREATED);//4
}
  • 1 中保证下载文件名为中文时不是乱码。
  • 2 保证是以文件形式下载。如果没有这句,就是直接预览在浏览器上。
  • 3 告诉浏览器是什么类型的文件,浏览器会用对应的文件类型的程序去处理。

互联网媒体类型

MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。

类型格式:type/subtype(;parameter)? type
主类型,任意的字符串,如text,如果是号代表所有;
subtype 子类型,任意的字符串,如html,如果是
号代表所有;
parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数。

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式

    以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml : XML数据格式
  • application/json : JSON数据格式
  • application/pdf :pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : form表单数据被编码为key/ value格式发送到服务器(表单默认的提交数据的格式)
  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

参考