SpringMVC 单文件上传与多文件上传实例

下面就给您详细讲解“SpringMVC 单文件上传与多文件上传实例”的完整攻略。

下面就给您详细讲解“SpringMVC 单文件上传与多文件上传实例”的完整攻略。

一、SpringMVC 单文件上传实例

1.1 相关依赖说明

在 pom.xml 文件中增加以下依赖:

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

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

1.2 前端表单处理

前端页面需要增加一个文件上传 input,用于上传文件,示例如下:

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
</form>

1.3 后端控制器处理

后端控制器中需要增加处理上传文件的方法,示例如下:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(HttpServletRequest request) throws Exception {
    // 上传文件的存储路径
    String uploadPath = request.getServletContext().getRealPath("/") + "upload";

    // 创建上传文件的存储路径
    File uploadDir = new File(uploadPath);
    if (!uploadDir.exists()) {
        uploadDir.mkdirs();
    }

    // 创建文件上传对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4096);
    factory.setRepository(uploadDir);
    ServletFileUpload upload = new ServletFileUpload(factory);

    // 获取上传的文件列表
    List<FileItem> items = upload.parseRequest(request);
    for (FileItem item : items) {
        // 判断是否为上传文件类型
        if (!item.isFormField()) {
            String fileName = item.getName();
            String filePath = uploadPath + File.separator + fileName;
            File file = new File(filePath);
            item.write(file);
        }
    }

    return "文件上传成功!";
}

以上后端处理逻辑主要是通过调用 ServletFileUpload 实现了上传文件的处理,其各个参数含义可以参考 maven 依赖包中所带源码中的注释。

二、SpringMVC 多文件上传实例

2.1 相关依赖说明

在 pom.xml 文件中增加以下依赖:

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

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

2.2 前端表单处理

前端页面需要增加多个文件上传 input,用于上传多个文件,示例如下:

<form method="post" action="/uploadMulti" enctype="multipart/form-data">
    <input type="file" name="file1" />
    <input type="file" name="file2" />
    <input type="file" name="file3" />
    <input type="submit" value="上传" />
</form>

2.3 后端控制器处理

后端控制器中需要增加处理上传多个文件的方法,示例如下:

@RequestMapping(value = "/uploadMulti", method = RequestMethod.POST)
@ResponseBody
public String uploadMulti(HttpServletRequest request) throws Exception {
    // 上传文件的存储路径
    String uploadPath = request.getServletContext().getRealPath("/") + "upload";

    // 创建上传文件的存储路径
    File uploadDir = new File(uploadPath);
    if (!uploadDir.exists()) {
        uploadDir.mkdirs();
    }

    // 创建文件上传对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4096);
    factory.setRepository(uploadDir);
    ServletFileUpload upload = new ServletFileUpload(factory);

    // 获取上传的文件列表
    List<FileItem> items = upload.parseRequest(request);
    for (FileItem item : items) {
        // 判断是否为上传文件类型
        if (!item.isFormField()) {
            String fileName = item.getName();
            String filePath = uploadPath + File.separator + fileName;
            File file = new File(filePath);
            item.write(file);
        }
    }

    return "文件上传成功!";
}

以上后端处理逻辑和单文件上传类似,只是在获取上传的文件列表时可以处理多个上传文件,如果希望获取到具体的上传文件名称,可以通过 FileItem 对象的 getFieldName() 方法获取到 input 控件的 name 属性值。

本文标题为:SpringMVC 单文件上传与多文件上传实例

基础教程推荐