servlet实现文件上传下载以及Filter过滤器使用

本文介绍了如何使用Servlet实现文件上传和下载,详细讲解了文件上传页面的三要素,以及过滤器Filter的配置和使用。在Filter部分,讨论了注解式配置、过滤器的优先级和过滤器链的工作原理。同时还提到了过滤器在实现自动登录场景的应用。
摘要由CSDN通过智能技术生成

servlet实现上传下载

文件上传页面三要素
  • 提供form表单,method必须是post
  • form表单的enctype必须是multipart/form-data
  • 提供 input type=“file” 类型输入

jar包:
commons-fileupload.jar
commons-io.jar

文件上传:
主流程类:

package com.booy;

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.io.PrintWriter;
import java.util.Collection;
//文件上传
@WebServlet(name = "uploadServlet",value = "/uploadServlet")
//文件注解,注解必须写,文件大小限制,不写参数默认不限制大小
@MultipartConfig(maxFileSize = 1024*1024*10,maxRequestSize = 1024*1024*100)
public class uploadServlet extends HttpServlet {
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   

        //设置编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //输出流
        PrintWriter out = response.getWriter();
        //接收文件
        Collection<Part> parts = request.getParts();
        //文件保存的位置
        String basePath = this.getServletContext().getRealPath("/WEB-INF/upload");
        File dir = new File(basePath);
        //如果没有文件夹就创建
        if(!dir.exists()){
   
            dir.mkdirs();
        }
        if(parts!=null){
   
            for (Part part:parts){
   
                //通过文件名,判断是文件还是普通项,普通项没有文件名
                String fileName = part.getSubmittedFileName();
                if(fileName==null){
   
                    //不是文件就获取用户名
                    String name = part.getName();
                    String value = request.getParameter(name);
                    System.out.println(name+"-->"+value);
                }else{
   
                    System.out.println("文件名是:"+fileName);
                    if(fileName==""){
   
                        continue;
                    }
                    //通过uuid拼接的新文件名
                    String newFileName = UploadUtils.createNewFileName(fileName);
                    //新文件夹名
                    String newdirname = UploadUtils.createNewPath(basePath, fileName);
                    //保存文件
                    part.write(newdirname+"/"+newFileName);
                    //清理缓存
                    part.delete();
                    //响应内容
                    out.write("<h2>上传成功:</h2>"+fileName+"<br>");
                }
            }
        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        doPost(request,response);
    }
}

工具类:UploadUtils
文件上传用到工具类中的文件名和文件夹重新生成方法,文件下载用到了文件查询方法

package com.booy;

import java.io.File;
import java.util.HashMap;
import java.util.UUID;
//工具操作类
public class UploadUtils {
   
    //文件重新生成文件名,通过uuid
    public static String createNewFileName(String oldFilename){
   
        //生成UUID并通过replace方法去掉“-”
        String uuid = UUID.randomUUID().toString().replace("-","");
        //新文件名为uuid+原文件名
        String newFileName=uuid+"_"+oldFilename;
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值