69期-Java SE-054_文件上传下载

### 文件上传下载

- 文件上传

- 客户端

  1、input 的 type 设置为 file。

  2、form 表单的 method 设置为 post(get 会将文件名传给后台,而非文件本身)

  3、form 表单的 enctype 设置为 multipart/form-data (以二进制的形式传输数据)

- 服务端

  commons-fileupload,commons-io

  基本思想:commons-fileupload 可以解析请求,得到一个泛型为 FileItem 的集合。

  commons-fileupload 可以将所有的请求信息都解析成 FileItem 对象,无论是表单域还是文件域。

  开发者就可以对 FileItem 集合进行操作,从而完成上传。

  上传组件可以将传来的二进制数据解析成一个集合,进而方便开发。

```jsp
<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-28
  Time: 20:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    
``` ```java package com.southwind.controller; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; @WebServlet("/upload.do") public class UploadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException { //创建DiskFileItemFactory DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); //创建文件解析器 ServletFileUpload upload = new ServletFileUpload(fileItemFactory); //获取FileItem集合 try { List list = upload.parseRequest(req); //遍历list for (FileItem fileItem:list){ if(!fileItem.isFormField()){ String fileName = fileItem.getName(); try { InputStream inputStream = fileItem.getInputStream(); String path = req.getServletContext().getRealPath(""); OutputStream outputStream = new FileOutputStream(path+"/files/"+fileName); int temp = 0; while((temp=inputStream.read())!=-1){ outputStream.write(temp); } inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } catch (FileUploadException e) { e.printStackTrace(); } } } ``` - 文件下载 ```jsp <%-- Created by IntelliJ IDEA. User: southwind Date: 2019-07-28 Time: 21:43 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> Title 1.png ``` ```java package com.southwind.controller; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @WebServlet("/download.do") public class DownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("application/x-msdownload"); String fileName = "1.png"; resp.setHeader("Content-Disposition","attachment;filename="+fileName); OutputStream outputStream = resp.getOutputStream(); String path = req.getServletContext().getRealPath("")+"/files/"+fileName; InputStream inputStream = new FileInputStream(path); int temp = 0; while((temp = inputStream.read())!=-1){ outputStream.write(temp); } outputStream.close(); inputStream.close(); } } ```

69期-Java SE-054_文件上传下载_第1张图片

 

 download.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-28
  Time: 21:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    1.png
    1.png

 

upload.jsp

<%--
  Created by IntelliJ IDEA.
  User: southwind
  Date: 2019-07-28
  Time: 20:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

69期-Java SE-054_文件上传下载_第2张图片

 

 web.xml

xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
web-app>

69期-Java SE-054_文件上传下载_第3张图片

 

 69期-Java SE-054_文件上传下载_第4张图片

 

 69期-Java SE-054_文件上传下载_第5张图片

 

 DownloadServlet.java

package com.southwind.controller;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

@WebServlet("/download.do")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        resp.setContentType("application/x-msdownload");
        String fileName = "1.png";
        resp.setHeader("Content-Disposition","attachment;filename="+fileName);
        OutputStream outputStream = resp.getOutputStream();
        String path = req.getServletContext().getRealPath("")+"/files/"+fileName;
        InputStream inputStream = new FileInputStream(path);
        int temp = 0;
        while((temp = inputStream.read())!=-1){
            outputStream.write(temp);
        }
        outputStream.close();
        inputStream.close();
    }
}

 

UploadServlet.java

package com.southwind.controller;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

@WebServlet("/upload.do")
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
        //创建DiskFileItemFactory
        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        //创建文件解析器
        ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
        //获取FileItem集合
        try {
            List list = upload.parseRequest(req);
            //遍历list
            for (FileItem fileItem:list){
                if(!fileItem.isFormField()){
                    String fileName = fileItem.getName();
                    try {
                        InputStream inputStream = fileItem.getInputStream();
                        String path = req.getServletContext().getRealPath("");
                        OutputStream outputStream = new FileOutputStream(path+"/files/"+fileName);
                        int temp = 0;
                        while((temp=inputStream.read())!=-1){
                            outputStream.write(temp);
                        }
                        inputStream.close();
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }

    }
}

 

转载于:https://www.cnblogs.com/HiJackykun/p/11538339.html

你可能感兴趣的:(69期-Java SE-054_文件上传下载)