四种文件上传方式(上传至本地服务)

引入pom依赖

    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
    </dependency>

配置web.xml 设置允许上传文件大小

  <!--配置控制器-->
  <servlet>
    <servlet-name>mvcServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--配置文件,读取配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:mvc2.xml</param-value>
    </init-param>
    <!--配置文件上传大小控制-->
    <multipart-config>
      <max-file-size>20848820</max-file-size>
      <max-request-size>418018841</max-request-size>
      <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
  </servlet>

1.Part方式单文件上传

    //    part单文件上传
    @PostMapping("/upload1")
    public String upload1(HttpServletRequest req) throws ServletException, IOException {
        Part file = req.getPart("file");
        String realPath = req.getServletContext().getRealPath("/");
        System.out.println(realPath);
        // 获取文件名,上传的文件名称
        String fileName = file.getSubmittedFileName();
        file.write(realPath + fileName);
        return "game/success";
    }
<h3>part单文件上传</h3>
<form action="/spring_mvc_base/game/upload1" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

2 .Part方式多文件上传

   //    part多文件上传
    @PostMapping("/upload2")
    public String upload2(HttpServletRequest req) throws ServletException, IOException {
//        获取所有文件
        Collection<Part> parts = req.getParts();
        String realPath = req.getServletContext().getRealPath("/");
        parts.forEach(part -> {
            String fileName = part.getSubmittedFileName();
            try {
                part.write(realPath + fileName);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
        return "game/success";
    }

3.MVC方式文件上传

导入依赖

    <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.1</version>
    </dependency>
    <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
    </dependency>

文件上传

    @Autowired
    HttpSession session;

    //mvc单文件上传
    @PostMapping("/upload3")
    public String upload3(MultipartFile file) {
        if (file != null && !file.isEmpty()) {
            commonUpload(file);
        }
        return "game/success";
    }


    //mvc多文件上传
    @PostMapping("/upload4")
    public String upload4(MultipartFile[] files) {
        if (files != null && files.length > 0) {
            for (MultipartFile file : files) {
                commonUpload(file);
            }
        }
        return "game/success";
    }

    // MVC上传公共方法
    public void commonUpload(MultipartFile file) {
        // 获取文件名
        String filename = file.getOriginalFilename();
        String realPath = session.getServletContext().getRealPath("/imgs/");
        // 加一层文件夹
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");
        realPath += simpleDateFormat.format(new Date());
        // 自动创建文件夹
        File file1 = new File(realPath);
        if (!file1.exists()) {
            file1.mkdirs();
        }
        String allPath = realPath + RandomUtil.getFileName(filename);
        try {
            file.transferTo(new File(allPath));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

4.html

<h3>part单文件上传</h3>
<form action="/spring_mvc_base/game/upload1" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

<h3>part多文件上传</h3>
<form action="/spring_mvc_base/game/upload2" method="post" enctype="multipart/form-data">
    <input type="file" name="file" multiple="multiple">
    <input type="submit" value="上传">
</form>

<h3>mvc单文件上传</h3>
<form action="/spring_mvc_base/game/upload3" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

<h3>mvc多文件上传</h3>
<form action="/spring_mvc_base/game/upload4" method="post" enctype="multipart/form-data">
    <input type="file" name="files" multiple="multiple">
    <input type="submit" value="上传">
</form>

RandomUtil

public class RandomUtil {
    private RandomUtil() {

    }

    private final static String POOL = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";

    public static String getString(int length) {
        if (length <= 0) {
            throw new IllegalArgumentException("参数异常,不能小于等于0");
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = ThreadLocalRandom.current().nextInt(POOL.length());
            char c = POOL.charAt(index);
            stringBuilder.append(c);
        }
        return stringBuilder.toString();
    }

    // 生成随机文件名
    public static String getFileName(String filename) {
        int lastIndex = filename.lastIndexOf(".");
        if (lastIndex == -1) {
            throw new IllegalArgumentException("文件名异常,没有文件类型");
        }
        // 获取文件类型
        String fileType = filename.substring(lastIndex + 1);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String time = simpleDateFormat.format(new Date());
        String name = getString(5) + time + "." + fileType;
        return name;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值