1、在servlet中实现文件的下载
?
public class OpenFileAction extends Action {
?private final String ENCODING= "utf-8";
?
?private final String CONTENT_TYPE = "text/plain;charset=utf-8";
?
?@Override
?public ActionForward execute(ActionMapping mapping, ActionForm form,
???HttpServletRequest request, HttpServletResponse response)
???throws Exception {
??
??
??//设置字符编码
??request.setCharacterEncoding(ENCODING);
??//获取文件的名字
??String fileName = request.getParameter("docName");
??if(fileName == null || fileName.trim().equals("")){
???response.setContentType(CONTENT_TYPE);
???PrintWriter out = response.getWriter();
???out.println("The file which you specify is not exists!!");
???out.close();
??}else{//file exists
???
???//下载文件的完整路径名
???String filePath = request.getSession().getServletContext().getRealPath("/workflow/upload");
???String fullFilename = filePath + "\\" + fileName;
???System.err.println("下载的文件 = " + fullFilename);
???
???//根据文件的类型设置response的contentType属性
???String contentType = request.getSession().getServletContext().getMimeType(fullFilename);
???if(contentType == null){
????contentType = "application/octet-stream";
???}
???response.setContentType(contentType);
???//设置response的头信息
???response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"),"ISO_8859_1"));
???
???//文件的输入输出流
???InputStream is = null;
???OutputStream os = null;
???try{
????is = new BufferedInputStream(new FileInputStream(fullFilename));
????//定义输出的字节流
????ByteArrayOutputStream baos = new ByteArrayOutputStream();
????//response输出流
????os = new BufferedOutputStream(response.getOutputStream());
????
????byte[] buffer = new byte[1024*4];
????
????int length = 0;
????
????while((length = is.read(buffer, 0, buffer.length)) != -1){
?????baos.write(buffer, 0, length);
????}
????os.write(baos.toByteArray());
???}catch(Exception ex){
????ex.printStackTrace();
???}finally{
????is.close();
????os.close();
???}
??}
??return null;
?}
}
?
个人学习,欢迎参考