文件上传总结

文件上传总结,第1张

参考文章:

https://www.cnblogs.com/yunliu0603/p/9504756.html

https://www.cnblogs.com/tengyunhao/p/7670293.html

注意:

文件 MultipartFile file;

多文件 MultipartFile[] file;

判断文件是否为空:!file.isEmpty() --->不为空

获取上传文件名:String originalFilename = file.getOriginalFilename() 包括文件名的后缀

文件保存路径:String filePath = request.getServletContext().getRealPath("/") + "upload/" + originalFilename

初始化文件信息:File newFile = new File(filePath)

创建目录:newFile.getParentFile().mkdir()

转存文件:file.transferTo(newFile)

步骤:

1.编写一个控制类;

2.编写提交表单的 action 方法,并使用 SpringMVC 注解 @RequestParam 来指定表单中的 file 参数;

3.指定一个用于保存文件的 web项目路径;

4.通过 MultipartFile 的 transferTo() 来转存文件到相应的路径;

5.编写 form 表单;

6.在 springMVC 配置文件中,定义文件上传解析器;

springMVC配置文件:

MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller。

MultipartResolver 是一个接口,它的实现类如下图所示,分为 CommonsMultipartResolver 类和 StandardServletMultipartResolver 类。

其中 CommonsMultipartResolver 使用 commons Fileupload 来处理 multipart 请求,所以在使用时,必须要引入相应的 jar 包;

而 StandardServletMultipartResolver 是基于 Servlet 3.0来处理 multipart 请求的,所以不需要引用其他 jar 包,但是必须使用支持 Servlet 3.0的容器才可以,以tomcat为例,从 Tomcat 7.0.x的版本开始就支持 Servlet 3.0了。

关于 MultipartResolver 的具体讲解,参考: https://www.cnblogs.com/tengyunhao/p/7670293.html

1、接收前端上传的文件

/**

   * 接收多文件

   */

  @RequestMapping("/upload")

  public  R  uploadFile(@RequestParam Map<String, Object>params, HttpServletRequest request) {

        // 复杂类型的request对象

      MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request

      // 获取文件名集合放入迭代器

      Iterator<String>files = mRequest.getFileNames()

        while (files.hasNext()) {

          // 获取上传文件的对象

          MultipartFile mFile = mRequest.getFile(files.next())

          if (mFile != null) {

              //原始文件名称

              String oldfile = mFile.getOriginalFilename()

       

              //文件后缀

              String suffix = oldfile.substring(oldfile.indexOf('.'), oldfile.length())

              String suffix2 = oldfile.substring(oldfile.indexOf('.')+1, oldfile.length())

          /***************文件处理*********************/

              }

      }

}

2.接收前端上传的文件

  /**

   * 接收附件

   * @param request

   * @return

   */

  @ResponseBody

  @RequestMapping(value="fileupload",method=RequestMethod.POST)

  public void springUpload(HttpServletRequest request) {

 

       //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)

      CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(

              request.getSession().getServletContext())

      //检查form中是否有enctype="multipart/form-data"

      if(multipartResolver.isMultipart(request)) {

      //将request变成多部分request

      MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request

      //获取multiRequest 中所有的文件名

       Iterator iter=multiRequest.getFileNames()

       while(iter.hasNext()){

              //一次遍历所有文件

              MultipartFile file=multiRequest.getFile(iter.next().toString())

              //最初上传文件名的文件名

              String oldFilename = file.getOriginalFilename()

              //获取初始文件名后缀

              String fileSuffix = oldFilename.substring(oldFilename.lastIndexOf(".") +1)

      /***************文件处理*********************/   

  }

}

3.接收前端上传的文件

/**

* 接收文件

*

*

* @param model

* @return

* @throws IOException

* @throws IllegalStateException

*/

@RequestMapping(value = "imageupload")

public void imageUpload(MultipartFile file) throws IllegalStateException, IOException {

          //文件名称

    String realFileName = file.getOriginalFilename()

    //文件后缀

    String suffix = realFileName.substring(realFileName.lastIndexOf(".") + 1)

         /***************文件处理*********************/

}

前端限制,用 正则匹配文件名后缀  /\.([jJ][pP][gG]){1}$|\.([jJ][pP][eE][gG]){1}$|\.([gG][iI][fF]){1}$|\.([pP][nN][gG]){1}$|\.([bB][mM][pP]){1}$/  这个是图片正则匹配

服务端获取文件,用正则匹配文件名后缀

MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest) request

            MultipartFile file = mrequest.getFile("file")

            if (file != null && !file.isEmpty()) {

                // 获得文件类型(可以判断如果不是指定类型,禁止上传)

                String contentType = file.getContentType()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8067934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存