文件上传和文件下载

文件上传:

1.首先,设计前台页面。

要在form表单中加上 enctype="multipart/form-data",指明接收请求的Servlet。

<form action="upload" method="post" enctype="multipart/form-data" >
  <span>上传文件</span><input type="file" name="filename" value="上传">
</form>

2.开发后台的Servlet。

2.1 在上传文件的Servlet上打注解:@MultipartConfig

2.2. 获取前台页面选择的文件名。

原理分析:在firebug上看到的文件上传的请求头为:

Content-Type: multipart/form-data; boundary=---------------------------16593218025140
Content-Length: 34211

-----------------------------16593218025140
Content-Disposition: form-data; name="fname"; filename="session (1).png"
Content-Type: image/png

每个文件都是一个Part,以前台的name属性标记,filename="session (1).png"为上传的文件名。

取出文件名:

request.setCharacterEncoding("utf-8");
Part part = request.getPart("filename");
        //获得上传的文件名
        String header = part.getHeader("Content-Disposition");
        int start = header.lastIndexOf("=");
        int end=header.lastIndexOf("\"");
        String fname= header.substring(start+2, end);
        System.out.println(fname);

如果上传多个文件,Collection<Part> parts = request.getParts(); 遍历parts,依次获取文件名。

2.3 将上传的文件存放在指定的路径下。


String path=request.getRealPath("/");//获取部署到tomcat下的文件路径
         System.out.println(path);
         String filename=path+fname;
         part.write(filename);

文件下载:

1.设置响应的文件类型

response.setContentType("application/octet-stream");

2.Response设置响应头Content-Dispostion,指定要下载的文件和下载方式。

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

attachment:表示文件输出流会以附件的方式下载

3.读文件到输入流,写到response对象的输出流中,将数据刷新到磁盘

InputStream in=new FileInputStream(request.getRealPath("/")+fname);
        ServletOutputStream out = response.getOutputStream();
        byte[] b=new byte[1024];
        int len=0;
        while((len=in.read(b))!=-1){
            out.write(b,0,len);
        }
        //将数据刷新到磁盘
        out.flush();

猜你喜欢

转载自blog.csdn.net/u013739073/article/details/52372297