文件下载
Posted StephenChowcai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件下载相关的知识,希望对你有一定的参考价值。
学习时练习代码:
第一部分: servlet类中代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//得到下载文件
File file = new File("E:/小星星.mp3");
//判断文件是否存在
if(file.exists()) {
//如果存在,创建文件输入流
FileInputStream fis = new FileInputStream(file);
//设置文件名编码格式
URLEncoder.encode(file.getName(), "utf-8");
//创建缓冲字节数组-缓冲区大小
byte[] b = new byte[fis.available()];
//读入字节流
fis.read(b);
//设置编码格式为utf-8
response.setCharacterEncoding("utf-8");
//激活文件下载框,设置保存文件的名称
response.setHeader("Content-Disposition", "attachment;filename = ‘hahaha‘");
//构造输出流
ServletOutputStream sos = response.getOutputStream();
//写文件流
sos.write(b);
//关闭流
fis.close();
sos.close();
}
}
第二部分:完整的例子代码如下
1:首先创建一个jsp,我取名为:fileDownload.jsp
主要代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
%>
<!DOCTYPE>
<html>
<body>
<form >
<a href="/123/fileDownload?file=java基础知识.txt">java基础知识</a>
</form>
</body>
</html>
对上面的代码解释如下:
<a href="/123/fileDownload?fileName=java基础知识.txt">
123代表的是创建的整个项目的名称。
fileDownload是随意起的名称,为了配置xml时用的。
?fileName=java基础知识.txt是传给服务器fileName的名称。
2:创建一个servlet,我取名为FileDownloadServlet
代码如下:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("fileName"); // 获取文件名称
filename = new String(filename.getBytes("ISO-8859-1"), "utf-8");// 解決中文乱码问题
String path = getServletContext().getRealPath("/fileDownload/" + filename);// 获取要下载文件的全路径地址
response.setContentType(this.getServletContext().getMimeType(filename));// 文件下载设置
response.addHeader("Content-Disposition", "attachment,filename=" + filename);
FileInputStream fis = new FileInputStream(path);// 创建文件的输入流
OutputStream os = response.getOutputStream();// 得到一个文件输出流,可以向浏览器输出数
int len = 0;// 表示实际每次读取多少个字节
byte[] buff = new byte[1024];// 创建一个缓冲字节数组
while ((len = fis.read(buff)) > 0) {
os.write(buff, 0, len);
}
fis.close();// 关闭资源
os.flush();
os.close();
}
}
3:配置WEB-INF下的web.xml,添加如下内容
<servlet>
<servlet-name>fileDownload</servlet-name>
<servlet-class>com.123.servlet.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileDownload</servlet-name>
<url-pattern>/fileDownload</url-pattern>
</servlet-mapping>
4:大功告成,可以测试运行了。
以上是关于文件下载的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )
背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件