文件----上传---下载

servlet—上传—下载—文件

上传

html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <!--请求的方式必须是post,必须包含enctype属性,值选择multipart/form-data-->
    <form action="uploadServlet"  method="post"  enctype="multipart/form-data">
        <input type="file" id="fileName" name="fileName">
        <input type="submit" value="上传文件" id="uploadButton">
    </form>
</body>
</html>

servlet

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.IOException;
import java.io.PrintWriter;
import java.util.UUID;

/**
 * @version 1.0
 * @author: liujiahuai
 * @date: 2019/8/22 0022 17:08
 */
@WebServlet(name = "UploadServlet",value = "/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter();
        // 创建part对象
        Part part = request.getPart("fileName");
        String contentDisposition = part.getHeader("Content-Disposition");
        System.out.println("contentDisposition=="+contentDisposition);

        // 动态获取服务器upload文件夹的路径
        String serverPath = request.getServletContext().getRealPath("download");
        System.out.println("serverPath==="+serverPath);
        System.out.println("part.getContentType=="+part.getContentType());

        if (part.getContentType().contains("image")){
            String suffix = contentDisposition.substring(contentDisposition.lastIndexOf("=")+2,contentDisposition.length()-1);
            System.out.println("suffix=="+suffix);
            // 随机的生成一个32的字符串
            String fileName = UUID.randomUUID()+suffix;
            System.out.println("filename====:"+fileName);
            // 向指定的文件夹写入文件
            part.write(serverPath+"\\"+fileName);
            writer.print("上传文件成功!!");
            writer.print("<a href='index.jsp'>返回</a>");
        }else {
            writer.print("请选择正确的图片格式!!!");
        }
        writer.flush();
        writer.close();
    }

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

下载

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>servlet方式下载</title>
</head>
<body>
    <h1>通过servlet程序下载文件</h1>
    <a href="downLoadServlet?fileName=学生列表-20190601095335.zip">压缩包</a>
    <a href="downLoadServlet?fileName=link.jpg">图片</a>
</body>
</html>

servlet

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;

/**
 * @version 1.0
 * @author: liujiahuai
 * @date: 2019/8/26 0026 10:56
 */
@WebServlet(name = "DownLoadServlet",value = "/downLoadServlet")
public class DownLoadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获得请求文件名
        String fileName = request.getParameter("fileName");
        System.out.println(fileName);

        // 设置文件MIME类型
        String mimeType = getServletContext().getMimeType(fileName);
        System.out.println("mimeType=="+mimeType);
        response.setContentType(mimeType);

        // 设置Content-Disposition
        response.setHeader("Content-Disposition", "attachment;filename="+fileName);

        // 读取目标文件,通过response将目标文件写到客户端
        // 获取目标文件的绝对路径
        String fullFileName = getServletContext().getRealPath("/download/" + fileName);
        System.out.println("fullFileName=="+fullFileName);
        // 读取文件
        InputStream in = new FileInputStream(fullFileName);
        OutputStream out = response.getOutputStream();

        // 写文件
        int b;
        while((b=in.read())!= -1) {
            out.write(b);
        }
        out.close();
        in.close();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值