首页 > 技术文章 > SSM实现文件上传

hanlin-hl 2020-11-03 00:01 原文

1、导入上传需要的jar包

  • commons-fileupload-1.3.3.jar
  • commons-io-2.6.jar

2、创建 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传</title>
</head>
<body>

<h1>上传图片</h1>
<form action="/upload/saveUpload" method="post" enctype="multipart/form-data">
    图片名称:<input type="text" name="name"><br>
    图片:<input type="file" name="multipartFile" multiple="multiple"><br>
    上传者:<input type="text" name="uploader"><br>
    <input type="submit" value="上传">
</form>

</body>
</html>

注意:

  • 1.form表单的 method 属性设置为 post
  • 2.form表单的 enctype 属性设置为 multipart/form-data
  • 3.提供 <input type="file" name="multipartFile">的文件上传输入框

3、在springmvc.xml文件中配置CommonsMultipartResolver文件解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置请求编码格式,必须与JSP中的pageEncoding属性一致-->
        <property name="defaultEncoding" value="UTF-8"/>
        <!--设置允许上传文件的最大值(2MB),单位为字节-->
        <property name="maxUploadSize" value="2097152"/>
</bean>

4、编写Controller层实现文件上传

package com.itheima.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.UUID;


@Controller
@RequestMapping("/upload")
public class UploadController {

    /**
     * 文件上传
     *
     * @param multipartFile
     * @param request
     */
    @RequestMapping("/saveUpload")
    public void saveUpload(MultipartFile multipartFile, HttpServletRequest request) {

        // 以当前日期创建一个文件夹,避免单个文件夹中文件过多
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());
        // 截取年月日:2020-11-02
        String substring = timestamp.toString().substring(0, 10);
        // 设置文件上传存放的路径
        String uploadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload/" + substring);

        System.out.println("获取到的图片上传地址为:" + uploadPath);
        // 获取上传文件名字
        String uploadName = multipartFile.getOriginalFilename();
        System.out.println("原始文件名:" + uploadName);
        // 利用UUID生成新的图片名字,避免原图片被覆盖
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");

        // 截取上传文件的后缀
        String suffix = uploadName.substring(uploadName.lastIndexOf("."));
        // 拼接新的文件名字
        String newUploadName = uuid + suffix;
        System.out.println("新的文件名:" + newUploadName);

        File dir = new File(uploadPath, newUploadName);
        // exists() 测试此抽象路径名表示的文件或目录是否存在。
        if (!dir.exists()) {
            dir.mkdirs();
        }
        //MultipartFile自带的解析方法
        try {
            multipartFile.transferTo(dir);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

运行代码,图片会上传到类路径下的 \WEB-INF\upload 下,会以当前日期创建文件夹存储图片

博客地址:https://www.cnblogs.com/MavenHan/p/13917316.html

推荐阅读