iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java如何实现单文件与多文件上传功能
  • 486
分享到

java如何实现单文件与多文件上传功能

java 2023-05-30 23:05:50 486人浏览 安东尼
摘要

小编给大家分享一下java如何实现单文件与多文件上传功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java 文件上传(单文件与多文件)一、简述一个javawe

小编给大家分享一下java如何实现单文件与多文件上传功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

java 文件上传(单文件与多文件)

一、简述

一个javaweb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的springMVC中单文件与多文件上传这部分知识做下笔记

二、单文件上传

1、页面

这里以一个简单的表单提交为例子,文件上传需要将表单的提交方法设置为post,将enctype的值设置为”multipart/fORM-data”。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">  <input type="file" name="img"><br />   <input type="submit" name="提交"></form>

2、控制器

在Controller的处理方法中,使用MultipartFile对象作为参数接收前端上传过来的文件,具体说明请看代码注释。

@Controller@RequestMapping("/test")public class MyController {  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)  // 这里的MultipartFile对象变量名跟表单中的file类型的input标签的name相同,所以框架会自动用MultipartFile对象来接收上传过来的文件,当然也可以使用@RequestParam("img")指定其对应的参数名称  public String upload(MultipartFile img, httpsession session)      throws Exception {    // 如果没有文件上传,MultipartFile也不会为null,可以通过调用getSize()方法获取文件的大小来判断是否有上传文件    if (img.getSize() > 0) {      // 得到项目在服务器的真实根路径,如:/home/Tomcat/WEBapp/项目名/images      String path = session.getServletContext().getRealPath("images");      // 得到文件的原始名称,如:美女.png      String fileName = img.getOriginalFilename();      // 通过文件的原始名称,可以对上传文件类型做限制,如:只能上传jpg和png的图片文件      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {        File file = new File(path, fileName);        img.transferTo(file);        return "/success.jsp";      }    }    return "/error.jsp";  }}

3、springmvc.xml配置

使用MultipartFile对象接收前端上传过来的文件,还需要在springmvc的配置文件中进行如下配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="Http://www.springframework.org/schema/beans"  xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:context="http://www.springframework.org/schema/context"  xsi:schemaLocation="    http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/tx    http://www.springframework.org/schema/tx/spring-tx.xsd    http://www.springframework.org/schema/mvc    http://www.springframework.org/schema/mvc/spring-mvc.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context.xsd">  ...  <!-- 注意:CommonsMultipartResolver的id是固定不变的,一定是multipartResolver,不可修改 -->  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    <!-- 如果上传后出现文件名中文乱码可以使用该属性解决 -->    <property name="defaultEncoding" value="utf-8"/>    <!-- 单位是字节,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过1M(1*1024*1024) -->    <property name="maxUploadSize" value="1048576"/>    <!-- 跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小 -->    <property name="maxUploadSizePerFile" value="1048576"/>  </bean>  <!-- 设置一个简单的异常解析器,当文件上传超过大小限制时跳转 -->  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">    <property name="defaultErrorView" value="/error.jsp"/>  </bean></beans>

上面配置文件中的CommonsMultipartResolver下的属性值配置不是必须的,你也可以全部不写。到这里就可以实现单个文件上传了,下面来看看多文件上传。

三、多文件上传

其实多文件上传也很简单,单文件上传是在Controller的处理方法中使用MultipartFile对象作为参数接收前端上传过来的文件,而多文件上传则使用MultipartFile对象数组来接收。

1、页面

该页面中有几个name值一样的file类型的input标签,其他跟单文件上传的页面没差。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">  file 1 : <input type="file" name="imgs"><br />   file 2 : <input type="file" name="imgs"><br />   file 3 : <input type="file" name="imgs"><br />   <input type="submit" name="提交"></form>

2、控制器

控制器中的处理方法使用MultipartFile[]数组作为接收参数,并不能直接使用,需要校正参数,具体说明请看代码注释。

@Controller@RequestMapping("/test")public class MyController {  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)  // 这里的MultipartFile[] imgs表示前端页面上传过来的多个文件,imgs对应页面中多个file类型的input标签的name,但框架只会将一个文件封装进一个MultipartFile对象,  // 并不会将多个文件封装进一个MultipartFile[]数组,直接使用会报[Lorg.springframework.web.multipart.MultipartFile;.<init>()错误,  // 所以需要用@RequestParam校正参数(参数名与MultipartFile对象名一致),当然也可以这么写:@RequestParam("imgs") MultipartFile[] files。  public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)      throws Exception {    for (MultipartFile img : imgs) {      if (img.getSize() > 0) {        String path = session.getServletContext().getRealPath("images");        String fileName = img.getOriginalFilename();        if (fileName.endsWith("jpg") || fileName.endsWith("png")) {          File file = new File(path, fileName);          img.transferTo(file);        }      }    }    return "/success.jsp";  }}

同样的,使用MultipartFile数组接收前端上传过来的多个文件,也需要在springmvc的配置文件进行配置,具体配置与上述单文件上传的springmvc.xml配置没差,直接拷贝过来就行。这样,就可以进行多文件上传了。

四、多种文件上传情景综合

当然,项目开发中,场景可能并不是这么简单,上述的多文件上传是一个个文件选择后一起上传(即多个name相同的input标签),那要是我项目中只要一个input标签就可以一次性多个文件呢?又或者一个页面中既要一个个选择的多文件上传,又要一次性选择的多文件上传,还要有单文件上传呢?没问题,MultipartFile[]通吃,代码也很easy,下面直接上代码。

1、页面

这里的 “一次选择多个文件的多文件上传” 只是在input标签中加上了multiple属性而已。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">  一次选择多个文件的多文件上传 : <br />   <input type="file" name="imgs1" multiple><br /> <br />   一次选择一个文件的多文件上传 : <br />   <input type="file" name="imgs2"><br />   <input type="file" name="imgs2"><br /><br />   单文件上传 : <br />   <input type="file" name="imgs3"><br /><br />   <input type="submit" name="提交"></form>

2、控制器

@Controller@RequestMapping("/test")public class MyController {  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)  public String upload(@RequestParam MultipartFile[] imgs1,@RequestParam MultipartFile[] imgs2,@RequestParam MultipartFile[] imgs3, HttpSession session)      throws Exception {    String path = session.getServletContext().getRealPath("images");    for (MultipartFile img : imgs1) {      uploadFile(path, img);    }    for (MultipartFile img : imgs2) {      uploadFile(path, img);    }    for (MultipartFile img : imgs3) {      uploadFile(path, img);    }    return "/success.jsp";  }  private void uploadFile(String path, MultipartFile img) throws IOException {    if (img.getSize() > 0) {      String fileName = img.getOriginalFilename();      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {        File file = new File(path, fileName);        img.transferTo(file);      }    }  }}

MultipartFile[]就是如此强大,不管单个多个,逻辑处理一样,所以建议在项目开发中使用MultipartFile[]作为文件的接收参数。

五、拓展

1、MultipartFile类常用的一些方法:

String getContentType()//获取文件MIME类型InputStream getInputStream()//获取文件流String getName() //获取表单中文件组件的名字String getOriginalFilename() //获取上传文件的原名long getSize() //获取文件的字节大小,单位byteboolean isEmpty() //是否为空void transferTo(File dest)

2、CommonsMultipartResolver的属性解析

defaultEncoding:表示用来解析request请求的默认编码格式,当没有指定的时候根据Servlet规范会使用默认值ISO-8859-1。当request自己指明了它的编码格式的时候就会忽略这里指定的defaultEncoding。uploadTempDir:设置上传文件时的临时目录,默认是Servlet容器的临时目录。maxUploadSize:设置允许上传的总的最大文件大小,以字节为单位计算。当设为-1时表示无限制,默认是-1。maxUploadSizePerFile:跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小。maxInMemorySize:设置在文件上传时允许写到内存中的最大值,以字节为单位计算,默认是10240。resolveLazily:为true时,启用推迟文件解析,以便在UploadAction中捕获文件大小异常。

六、注意

  1. 在开发过程中,建议把配置文件中的异常解析器(SimpleMappingExceptionResolver)先注释掉,方便我们查看错误。

  2. 有时候上传出错,是因为我们在配置文件中限制了上传文件的大小,你可以不加这个限制,但个人建议这个限制最好还是加上,具体文件大小限制请根据公司项目情况而定。

  3. SpringMVC中使用MultipartFile接收上传文件需要依赖两个jar包,分别是:commons-fileupload-1.3.3.jar、commons-io-2.5.jar。

以上是“java如何实现单文件与多文件上传功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: java如何实现单文件与多文件上传功能

本文链接: https://www.lsjlt.com/news/222067.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何实现单文件与多文件上传功能
    小编给大家分享一下java如何实现单文件与多文件上传功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java 文件上传(单文件与多文件)一、简述一个javaWe...
    99+
    2023-05-30
    java
  • SpringBoot如何实现单文件与多文件上传功能
    这篇文章将为大家详细讲解有关SpringBoot如何实现单文件与多文件上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.单文件上传首先创建一个Spring Boot项目,并添加spring-boo...
    99+
    2023-06-26
  • SpringBoot实现单文件与多文件上传功能
    目录1.单文件上传2.多文件上传1.单文件上传 首先创建一个Spring Boot项目,并添加spring-boot-starter-web依赖 然后创建一个upload.jsp文件...
    99+
    2024-04-02
  • Java如何实现多文件上传功能
    这篇文章主要为大家展示了“Java如何实现多文件上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java如何实现多文件上传功能”这篇文章吧。文件上传是开发中十分常见的功能,在servlet...
    99+
    2023-06-20
  • Struts2实现单文件或多文件上传功能
    一、简述Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.in...
    99+
    2023-05-31
    struts2 文件上传 st
  • Java实现多文件上传功能
    文件上传是开发中十分常见的功能,在servlet3.0之前,实现文件上传需要使用一些插件技术,比如: commons-fileupload smartupload ...
    99+
    2024-04-02
  • SpringBoot实现单文件与多文件上传
    目录一、公共文件存储代码1.FileUploadUtils.java2.FileUtils.java3.MimeTypeUtils.java4.FileException.java5...
    99+
    2024-04-02
  • SpringMVC 单文件上传与多文件上传实例
    一、简述一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件上传这部分知识做下笔记。二、单文件上传1、...
    99+
    2023-05-31
    springmvc 文件上传 多文件上传
  • ajaxFileupload如何实现多文件上传功能
    这篇文章将为大家详细讲解有关ajaxFileupload如何实现多文件上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。打开google 搜索"ajaxFi...
    99+
    2024-04-02
  • java开发之spring webflow如何实现上传单个文件及多个文件功能
    这篇文章主要介绍java开发之spring webflow如何实现上传单个文件及多个文件功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:上传单个文件准备 如果你项目中使用了spring security的...
    99+
    2023-05-30
    java spring webflow
  • Struts2实现多文件上传功能
    前台form 表单:设置method=post,enctype=multipart/form-data。struts2在原有的上传解析器继承上做了进一步封装,更进一步简化了文件上传。Action需要使用3个属性来封装该文件域的信息:(1)类...
    99+
    2023-05-31
    struts2 上传 st
  • AjaxFileUpload+Struts2如何实现多文件上传功能
    这篇文章给大家分享的是有关AjaxFileUpload+Struts2如何实现多文件上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。单文件和多文件的实现区别主要修改两点,一...
    99+
    2024-04-02
  • Java+EasyExcel实现文件上传功能
    目录需求描述实现0、依赖1、编写配置类2、文件上传工具类3、编写Controller4、编写Service5、编写excel对应的类6、创建easyExcel的监听器7、最终效果需求...
    99+
    2023-02-24
    Java EasyExcel文件上传 Java EasyExcel上传 Java 文件上传 Java EasyExcel
  • JavaWeb实现简单文件上传功能
    本文实例为大家分享了JavaWeb实现简单文件上传的具体代码,供大家参考,具体内容如下 1.概述 通常浏览器上传的所有参数,我们可以通过request对象的getParameter ...
    99+
    2024-04-02
  • JavaWeb实现简单上传文件功能
    本文实例为大家分享了JavaWeb实现上传文件功能的具体代码,供大家参考,具体内容如下 基本思想:网站服务器的内部除了有Web应用,还有文件系统,客户端向网站上传文件就是将文件以流的...
    99+
    2024-04-02
  • java实现文件的上传功能
    本文实例为大家分享了java实现文件的上传功能的具体代码,供大家参考,具体内容如下 直接上代码了 一、上传界面 <%@ page language="java" content...
    99+
    2024-04-02
  • nodejs如何实现简单的文件上传功能
    这篇文章主要为大家展示了“nodejs如何实现简单的文件上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodejs如何实现简单的文件上传功能”这篇文章吧。首先需要大家看一下目录结构,然后...
    99+
    2023-06-29
  • Servlet实现简单文件上传功能
    本文实例为大家分享了Servlet文件上传的具体代码,供大家参考,具体内容如下两点要素: 表单提交方式必须是post 2.enctype一定要是multipart/form-data。 enctype的默认值是application/x-w...
    99+
    2023-05-30
    servlet 文件上传 实现简单
  • SpringBoot如何实现文件上传功能
    这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的文件上传服务器处理上传文件一般都是先在请求中读取文件信息,然后改...
    99+
    2023-06-25
  • JavaWeb如何实现上传文件功能
    本篇内容主要讲解“JavaWeb如何实现上传文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaWeb如何实现上传文件功能”吧!这是需要使用到的两个jar包一定要导入到lib目录中,并...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作