# servlet-download-example **Repository Path**: Sod-Momas/servlet-download-example ## Basic Information - **Project Name**: servlet-download-example - **Description**: servlet 触发浏览器下载文件的示例 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-01-16 - **Last Updated**: 2022-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # servlet-download-example servlet 触发浏览器下载文件的示例 ## 项目启动 本项目使用 maven 管理依赖 直接在项目根目录运行以下命令可以启动项目 ```bash mvn tomcat7:run ``` 启动后访问 [localhost/download](http://localhost/download) 就可以使用下载接口了 如果你的80端口正在被使用,可以更改 `pom.xml` 文件里 `tomcat7-maven-plugin` 插件的配置 ```xml org.apache.tomcat.maven tomcat7-maven-plugin 2.2 / 80 UTF-8 ``` ## 项目想要解决的问题 在编写下载文件的接口时, 会遇到很多问题 1. 读取文件的IO操作非常麻烦 2. 发生错误时错误消息乱码 3. 下载时文件名乱码 4. 下载时文件大小未知 本项目致力解决以上四个问题 1. 使用 java 7 提供的 NIO API 实现了简单的读取文件操作, 主要的类是 `java.nio.file.Paths` 和 `java.nio.file.Files` 2. 设置 response 的 `CharsetEncoding` 和 `Content-Type` 来解决乱码问题 3. 设置 response 的 `Content-Disposition` 来解决下载时文件名乱码的问题 4. 设置 response 的 `Content-Length` 来解决下载时文件大小未知的问题 ## 参考资料 博客 - [http下载文件,中文文件名在firefox下乱码问题](https://my.oschina.net/iceman/blog/67541) - [Firefox下载文件时中文名乱码问题](https://www.cnblogs.com/godtrue/p/4333262.html) MDN - [Content-Disposition](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition) `Content-Disposition` 响应头的作用 - [Content-Type](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Type) Content-Type 实体头的作用 - [Content-Length](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Length) Content-Length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。 RFC - [Media Types](http://www.iana.org/assignments/media-types/media-types.xhtml) 不同文件的 MIME Types - [octet-stream - Media Type](https://www.iana.org/assignments/media-types/application/octet-stream) octet-stream 类型的规范