文件下载

文件下载

因为要下载的文件可以是各种类型的文件,所以要将文件传送给客户端,其相应内容应该被当做二进制来处理,所以应该调用                               方法返回 ServeltOutputStream对象来向客户端写入文件内容。                       

 

下载案例

遍历上传目录下的所有文件显示给用户,并允许用户完成下载。

(读取某一个文件夹下的所有的文件,存到集合里面List,再存到request作用域范围中)ListFileServelt—(将所有的文件列表显示)Listfiles.jsp-----DownloaServlet.java

private String id;

private String savename;  //上传文件的名称,文件的uuid名

private String realName; //上传文件的真实名称

private String savepath;     //记住文件的位置

private Date uptime;     //文件的上传时间

private String description;  //文件的描述

private String username;   //上传人

ListFileServlet

package com.hbsi.servlet;

 

import java.io.File;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.HashMap;

import java.util.Map;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

public class ListFileServlet extendsHttpServlet {

 

       publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

                     throwsServletException, IOException {

              Stringsavepath = this.getServletContext().getRealPath(

                            "/WEB-INF/upload");

 

              Mapmap = new HashMap();

              listFiles(newFile(savepath), map);

              request.setAttribute("map",map);

 

              request.getRequestDispatcher("/listfile.jsp")

                            .forward(request,response);

       }

 

       privatevoid listFiles(File file, Map map) {

 

              if(file.isFile()) {

                     Stringuuidname = file.getName(); // uuid_a_1_3_3.txt

                     Stringrealname = uuidname.substring(uuidname.indexOf("_") + 1);

 

                     map.put(uuidname,realname);

 

              }else {

                     File[]files = file.listFiles();

                     for(File f : files) {

                            listFiles(f,map);

                     }

              }

       }

 

       publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

                     throwsServletException, IOException {

              doGet(request,response);

       }

 

}

 

DownloadServlet

package com.hbsi.servlet;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.URLEncoder;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

public class DownloadServlet extendsHttpServlet {

 

       publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

                     throwsServletException, IOException {

              Stringfilename = request.getParameter("filename");

              filename= new String(filename.getBytes("iso8859-1"), "utf-8");

              System.out.println(filename);

              Stringsavepath = this.getFileSavePath(this.getRealName(filename));

              Filef = new File(savepath + "\\" + filename);

 

              if(!f.exists()) {

                     request.setAttribute("message","下载的资源不存在");

                     request.getRequestDispatcher("/message.jsp").forward(request,response);

 

              }

 

              response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(this.getRealName(filename),"UTF-8"));

 

              FileInputStreamin = new FileInputStream(f);

              byte[]buf = new byte[1024];

              intlen = 0;

 

              OutputStreamout = response.getOutputStream();

              while((len = in.read(buf)) > 0) {

                     out.write(buf,0, len);

              }

              in.close();

 

       }

 

       publicString getFileSavePath(String filename) {

 

              intdir1 = filename.hashCode() & 0xf;

              intdir2 = (filename.hashCode() >> 4) & 0xf;

              Stringsavepath = this.getServletContext().getRealPath("/WEB-INF/upload")+"\\" + dir1 + "\\" + dir2;

 

              returnsavepath;

       }

 

       publicString getRealName(String filename) {

              StringrealName = filename.substring(filename.indexOf("_") + 1);

              returnrealName;

       }

 

       publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

                     throwsServletException, IOException {

              doGet(request,response);

       }

 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值