文件的下载
来源:互联网 发布:大学生如何找兼职 知乎 编辑:程序博客网 时间:2024/05/19 04:04
package com.jsun.servlet;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jsun.entity.FileMes;
import com.jsun.service.FileMesService;
import com.jsun.util.MyBeanFactory;
/**
* Servlet implementation class DownloadServlet
*/
@WebServlet(urlPatterns={"/DownloadServlet.jsp"})
public class DownloadFileServlet extends HttpServlet {
public static final String FILE_DIR="d:/assets/files/";
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownloadFileServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
long id=Long.parseLong(request.getParameter("id"));
String MIME="application/msword"; //文件MIME类型
String fileName=MyBeanFactory.beanFactory.getBean("fileMesServiceImpl", FileMesService.class).getFileMes(new FileMes(id)).getName();
downLoad(FILE_DIR+fileName, MIME, request, response);
}
/**
* 执行下载
* @param filePath
* @param MIME
* @param request
* @param response
* @throws IOException
*/
private void downLoad(String filePath,String MIME,HttpServletRequest request, HttpServletResponse response) throws IOException{
File file = new File(filePath); //取得要传送的文件,实际应用时可以将文件路径以参数的形式传入
long fileSize = file.length(); //文件长度
byte[] b=new byte[1024];
FileInputStream fin = new FileInputStream(file);
DataInputStream in = new DataInputStream(fin);
// 设置响应头信息,让下载的文件显示保存信息
response.setContentType("application/x-msdownload; charset=gbk");
response.setHeader("Content-disposition", "attachment;filename="+new String(file.getName().getBytes("gbk"),"ISO8859_1"));
response.setContentType(MIME); //设置输出流的MIME类型
response.setContentLength((int) fileSize); //有什么区别
// response.setHeader("Content-length", filesize);
ServletOutputStream servletOut = response.getOutputStream();
// 发送文件数据,每次1024字节,最后一次单独计算
long totalsize = 0;
while(totalsize<fileSize){
totalsize+=1024;
if(totalsize>fileSize){ //最后一次传送的字节数
byte[] leftpart = new byte[1024-(int)(totalsize-fileSize)];
in.readFully(leftpart);
servletOut.write(leftpart);
}
else{
in.readFully(b); //读1024个字节至字节数组b
servletOut.write(b);
}
}
servletOut.close();
}
}
- struts2的文件下载(0):文件下载
- 输出文件的下载
- 下载文件的代码
- Struts的文件下载
- jsp的下载文件
- 文件下载的制作
- 文件的下载
- 客户端文件的下载
- Struts2 的文件下载
- Struts2 的文件下载
- .txt文件的下载
- Struts2文件的下载
- 文件的下载
- thinkphp 的文件下载
- struts2的文件下载
- 文件的多线程下载
- (28)文件的下载
- android 文件的下载
- MBR是什么
- 谈谈制定职业规划的意义
- mysql常用的命令
- 《黑客与画家》出片前的有关信息
- jsf常用的标签
- 文件的下载
- vss2005 配置与使用
- tomcat 与apache的整合
- 深入浅出认识IP地址的真正含义
- Filter for *.jsp
- linux 环境变量有关
- ConnectionPool
- C++资源之不完全导引(完整版)
- C++类库介绍