jsp页面:

<%--
  Created by IntelliJ IDEA.
  User: asus
  Date: 2020/9/22
  Time: 16:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<%--
enctype="application/x-www-form-urlencoded"  默认情况
enctype="multipart/form-data" 表单提交 以二进制流的形式提交
--%>
    <form action="fileUpload"   method="post" enctype="multipart/form-data">
        文件1:<input type="file" name="file1"><br>
        文件2:<input type="file" name="file2"><br>
        <input type="submit" value="上传文件">
    </form>

<h2>下载文件</h2>
<a href="downLoadServlet?filename=a.png">a.png</a>
<a href="downLoadServlet?filename=哈哈.png">哈哈.png</a>
</body>
</html>

fileupload:

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.UUID;

@WebServlet("/fileUpload")
@MultipartConfig(maxFileSize = 50*1024*1024,maxRequestSize = 100*1024*1024)
// maxFileSize限制接收文件的大小   maxRequestSize 最大请求数据量
public class FileUpload extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      /*  //接收文件块 file1
        Part part = req.getPart("file1");
        //最终要把文件放在本地目录
        String path="C:\\Users\\asus\\Desktop\\java2006班\\单词记忆";

        File file = new File(path);
        if(!file.exists()){//如果文件不存在,创建目录
            //循环创建目录
            file.mkdirs();
        }

        //将文件写在哪个路径
        //part.getSubmittedFileName();  获取文件名
        //UUID.randomUUID()   每次获取都是不同的字符串
        // File.separator  代表文件分隔符
        part.write(path + File.separator + UUID.randomUUID().toString() + "-" + part.getSubmittedFileName());
        resp.getWriter().println("ok");*/


        String path="C:\\Users\\asus\\Desktop\\java2006班\\单词记忆";

        File file = new File(path);
        if(!file.exists()){//如果文件不存在,创建目录
            //循环创建目录
            file.mkdirs();
        }
        Collection<Part> parts = req.getParts();
        for (Part part:parts){
            part.write(path+ File.separator+ UUID.randomUUID().toString() +"-"+ part.getSubmittedFileName());
        }
        resp.getWriter().println("ok");
    }
}

Download:

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.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

@WebServlet("/downLoadServlet")
public class DownLoadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String filename = req.getParameter("filename");

        if(filename != null){
            String path = "C:\\Users\\asus\\Desktop\\java2006班\\单词记忆";
            //1.根据文件名 读取文件
            FileInputStream inputStream = new FileInputStream(path + File.separator + filename);


            //2.将读取到的文件返回给前端,
            //前端收到响应以文件形式保存,并且制定保存的文件名
            //URLEncoder.encode(filename,"utf-8");解决中文乱码问题
            resp.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(filename,"utf-8"));

            byte[] buff = new byte[1024*4];
            // 返回的是真正读取的长度
            // -1  代表读取完毕
//           int length =  inputStream.read(buff);

            int length = 0;
            while((length = inputStream.read(buff)) != -1){
                //  将buff 中的数据写入到 servletOutputStream
                // 0 代表从 buff 下标0开始度
                // length  读多少  buff里面有多少字节,我们才读多少字节
                resp.getOutputStream().write(buff,0,length);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

 

posted on 2020-09-24 21:40  zitian246  阅读(181)  评论(0编辑  收藏  举报