spring-mvc实现网页文件上传

Posted 子璟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-mvc实现网页文件上传相关的知识,希望对你有一定的参考价值。

1 文件上传

1.1 表单要求【注意】

要求1:表单必须是post请求

要求2:form标签必须有enctype="multipart/form-data"

要求3:必须要有文件上传项,type="file"

<form action="uploadController/upload" method="post" enctype="multipart/form-data">
  <!--文件上传表单的name属性值一定要与controller处理器中方法的参数对应,否则无法实现文件上传-->
  上传LOGO:<input type="file" name="files"/><br/>
  上传照片:<input type="file" name="files"/><br/>
  上传任意文件:<input type="file" name="files"/><br/>
  <input type="submit" value="上传"/>
</form>

1.2 Spring MVC文件上传步骤

【第一步】:导入commons-fileupload依赖
【第二步】:在spring-mvc.xml中配置CommonsMultipartResovler解析器
【第三步】:在Controller中编写方法接收实现文件上传

【第一步】:导入commons-fileupload依赖

<!--文件上传-->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

【第二步】:在spring-mvc.xml中配置CommonsMultipartResovler解析器

<!--
        配置文件上传解析器
        id固定值是:multipartResolver
     -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!--上传的所有文件的最大大小,最大100m-->
  <property name="maxUploadSize" value="104857600"/>
  <!--上传的单个文件大小,最大10m-->
  <property name="maxUploadSizePerFile" value="10485760"/>
  <!--中文文件名编码-->
  <property name="defaultEncoding" value="utf-8"/>
</bean>

【第三步】:在Controller中编写方法接收实现文件上传

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

  @RequestMapping("/upload")
  @ResponseBody
  public void doUpload(MultipartFile[] files, HttpServletRequest request) throws IOException {
    //System.out.println(file.getSize());//获取文件大小
    //System.out.println(file.isEmpty()); //是否是空文件
    //System.out.println(file.getBytes().length);  //获取文件字节数组的大小,和size一样
    //System.out.println(file.getOriginalFilename()); //文件名:头图 (2).jpg
    //System.out.println(file.getName()); // 表单的name属性
    //将上传的文件保存到服务器硬盘中
    if(files!=null && files.length>0){
      for (MultipartFile multipartFile : files) {
        //1 获取上传的目录
        String realPath = request.getServletContext().getRealPath("/upload");
        //2 生成唯一的文件名
        //2.1 获取到原始文件名
        String filename = multipartFile.getOriginalFilename();
        //2.2 生成唯一UUID
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        //2.3 获取文件的后缀名
        String suffix=filename.substring(filename.lastIndexOf(".")); //.jpg
        //2.4 组合成新的文件名
        filename=uuid+suffix;
        //3 保存到目录中
        multipartFile.transferTo(new File(realPath,filename));
      }
    }
  }
}

注意事项

问题1:上传多个文件如何接收?

问题2:如何解决文件重名问题?

注意事项:
image-20200906164408234

以上是关于spring-mvc实现网页文件上传的主要内容,如果未能解决你的问题,请参考以下文章

网页里如何上传附件

java Ftp上传创建多层文件的代码片段

python使用selenium模拟点击网页实现自动导入上传文件功能

python使用selenium模拟点击网页实现自动导入上传文件功能

Tomcat根据JSP生成Servlet机制解析

如何在网页实现上传各种文件或图片视频等功能