• 一、配置SpringMVC
  • 二、单文件与多文件上传
  • 三、多文件上传
  • 四、带参数上传

一、配置SpringMVC
在spring.xml中配置:

    <!-- springmvc文件上传需要配置的节点-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="-1"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="false"/>
<property name="uploadTempDir" value="/statics/document/tempdir"/>
<!--<property name="maxInMemorySize" value="104857600"/>-->
</bean>

其中属性详解:
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="-1 是上传文件的大小,单位为字节 -1表示无限制
uploadTempDir="fileUpload/temp" 为上传文件的临时路径


二、单文件与多文件上传
1、单文件上传
jsp:

<body>
<h2>文件上传实例</h2> <form action="fileUpload.html" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="file">
<input type="submit" value="提交">
</form> </body>

注意要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的!

controller:

    @RequestMapping("fileUpload")
public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file) {
// 判断文件是否为空
if (!file.isEmpty()) {
try {
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
+ file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
} catch (Exception e) {
e.printStackTrace();
}
}
// 重定向
return "redirect:/list.html";
}

注意RequestParam参数中value的名字要与jsp中的相互匹配,否则会找不到返回空指针
transferTo是存储文件的核心方法,但是这个方法同一个文件只能使用一次,不能使用第二次,否则tomcat服务器会报500的错误

MultipartFile类常用的一些方法:

String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize() //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest)//保存到一个目标文件中。


三、多文件上传
与上面的相同只不过是form里面多创建几个input
如果需要使用一个标签控件上传多个文件,需要使用js插件uploadify
博主备份的下载地址(该版本为flash版本,不推荐,HTML5版本请自行去官网下载):uploadify.rar(解压密码:crowsong.xyz): http://waternote.ctfile.net/fs/2276132-372974128   
jsp:

<body>
<h2>上传多个文件 实例</h2> <form action="filesUpload.html" method="post"
enctype="multipart/form-data">
<p>
选择文件:<input type="file" name="files">
<p>
选择文件:<input type="file" name="files">
<p>
选择文件:<input type="file" name="files">
<p>
<input type="submit" value="提交">
</form>
</body>

controller:

  private boolean saveFile(MultipartFile file) {
// 判断文件是否为空
if (!file.isEmpty()) {
try {
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
+ file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
} @RequestMapping("filesUpload")
public String filesUpload(@RequestParam("files") MultipartFile[] files) {
//判断file数组不能为空并且长度大于0
if(files!=null&&files.length>0){
//循环获取file数组中得文件
for(int i = 0;i<files.length;i++){
MultipartFile file = files[i];
//保存文件
saveFile(file);
}
}
// 重定向
return "redirect:/list.html";
}

四、带参数上传
还是使用form表单进行上传,但是上传文件的时候要带上一部分的参数
例子form上传使用多个input上传多个文件并且携带参数
jsp:
其中使用了ajaxForm插件,并没有展示出来

    <form method="post" enctype="multipart/form-data" id="uploadForm"
action="${pageContext.request.contextPath}/background/worksInsert">
作品名称:<input type="text" name="name" id="name"><br>
参赛年份:<input type="text" name="year" id="year"><br>
参加竞赛:<select name="competition" id="competition">
<option value="请选择">请选择</option>
</select><br>
源文件上传:<input type="file" name="file1" id="file1"><br>
展示文件上传:<input type="file" name="file2" id="file2"><br>
附件上传:<input type="file" name="file3" id="file3"><br>
<input type="submit" value="提交"> </form>

controller:
主要是参数的书写,通过不同的value取到不同得文件,同时request.getParameter方法取到参数的值

  @RequestMapping("/worksInsert")
@ResponseBody
public MessageCarrier worksInsert(@RequestParam(value = "file1", required = false) MultipartFile file1, @RequestParam(value = "file2", required = false) MultipartFile file2, @RequestParam(value = "file3", required = false) MultipartFile file3, HttpServletRequest request) throws IOException {
MessageCarrier messageCarrier = new MessageCarrier();
if (file1 == null || request.getParameter("name") == null) {
return null;
}
// 获取源文件存储路径
String filename = request.getParameter("name");
String sworks = savePathL("works") + "/" + filename;
String vworks = savePathL("works") + "/" + filename;
String fworks = savePathL("works") + "/" + filename;
String sRealworks = System.getProperty("studentSystem.root") + sworks.substring(1, sworks.length());
String sRealvworks = System.getProperty("studentSystem.root") + vworks.substring(1, vworks.length());
String sRealfworks = System.getProperty("studentSystem.root") + fworks.substring(1, fworks.length());
DBWorks dbWorks = new DBWorks();
CompetitionWorks competitionWorks = new CompetitionWorks();
// System.out.println(request.getParameter("name"));
competitionWorks.setWorksName(request.getParameter("name")); competitionWorks.setWorksYear(request.getParameter("year"));
competitionWorks.setWorksComID(request.getParameter("competition"));
competitionWorks.setWorksIsIndex("0");
competitionWorks.setWorksNeedUpdate("0");
competitionWorks.setWorksSavePath(sworks + "/" + file1.getOriginalFilename());
// 如果有展示文件获取展示文件的存储路径
if (file2 != null && file2.getSize() != 0) {
competitionWorks.setWorksSaveViewPath(vworks + "/" + file2.getOriginalFilename());
} else {
competitionWorks.setWorksSaveViewPath("NULL");
}
// 如果有附件的话获取附件的存储路径并保存
if (file3 != null && file3.getSize() != 0) {
competitionWorks.setWorksSaveFilePath(fworks + "/" + file3.getOriginalFilename());
} else {
competitionWorks.setWorksSaveFilePath("NULL");
} //先将内容设置为NULL
competitionWorks.setWorksContent("NULL");
messageCarrier = dbWorks.worksInsert(competitionWorks);
switch (messageCarrier.getMessageContent()) {
case "OK": {
FilesUpload filesUpload = new FilesUpload();
messageCarrier = filesUpload.upload(file1, sRealworks);
if (!competitionWorks.getWorksSaveViewPath().equals("NULL")) {
messageCarrier = filesUpload.upload(file2, sRealvworks);
}
if (!competitionWorks.getWorksSaveFilePath().equals("NULL")) {
messageCarrier = filesUpload.upload(file3, sRealfworks);
} //如果上传成功则解析内容并将其录入数据库
if (messageCarrier.getMessageContent().equals("OK")) {
String path = competitionWorks.getWorksSavePath();
String filePath = System.getProperty("studentSystem.root") + path;
String fileName = path.substring(path.lastIndexOf("/") + 1);
File file = new File(filePath);
//解析文件内容
FilesToContent filesToContent = new FilesToContent();
String content = filesToContent.resolve(file);
// System.out.println(content);
competitionWorks.setWorksContent(content);
messageCarrier = dbWorks.worksUpdateName(competitionWorks);
} }
break;
default: {
return messageCarrier;
}
}
return messageCarrier;
}

本文章笔记版本地址:http://ccdd6ec5.wiz03.com/share/s/3cTmX51TMQ-b2QTact03UPg83ItAml2XO4wJ23yjLa2bEKE1

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传的更多相关文章

  1. netcore3.1 + vue (前后端分离) ElementUI多文件带参数上传

    vue前端代码 前端主要使用了ElementUI的el-uploda插件,除去业务代码需要注意的是使用formdata存储片上传时所需的参数 <el-upload class="upl ...

  2. 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

    原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...

  3. 论httpclient上传带参数【commons-httpclient和apache httpclient区别】

    需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = ...

  4. SpringMVC 使用MultipartFile实现文件上传(转)

    http://blog.csdn.net/kouwoo/article/details/40507565 一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们 ...

  5. SpringMVC 使用 MultipartFile 实现文件上传

    该代码实现了文件上传和文本字段同时传递到后台进行处理的功能. 直接贴代码,中间涉及到的实体类就不贴了,和功能没啥关系的. Controller /** * 添加活动 * * @param req * ...

  6. SpringMVC实现 MultipartFile 文件上传

    1. Maven 工程引入所需要的依赖包 2. 页面需要开放多媒体标签 3. 配置文件上传试图解析器 4. 接收图片信息,通过 IO 流写入磁盘(调用解析其中的方法即可) 如下: 1.1 引入所依赖的 ...

  7. springMVC实现 MultipartFile 多文件上传

    1.Maven引入所需的 jar 包(或自行下载) <dependency> <groupId>commons-io</groupId> <artifactI ...

  8. springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传

    总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...

  9. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

随机推荐

  1. markdown模式的一些语法

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 简书支持程序员写技术博客的模式,Markdown具有一系列衍生版本,用于扩展Mar ...

  2. MIPS重返硅谷 放眼AI未来

    MIPS最近以一家独立公司之姿重新回到了矽谷,在Tallwood的带领下积极投入原有的嵌入式业务,并放眼下一代人工智能(AI)领域.   MIPS最近以一家独立公司之姿重新回到了矽谷——加州圣塔克拉拉 ...

  3. Node.js,一生所爱

    下午参加了<云品秀--前端前沿>,用友云平台前端架构师郭永峰(站着的那位)讲得很棒,而我最关注的就是Node了.最后我问了他关于独立开发,后端选择Node还是别的语言.他讲了很多,说自己在 ...

  4. 【19.05%】【codeforces 731F】 Video Cards

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. ANDROID L——RecyclerView,CardView进口和使用(Demo)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 这篇文章是ANDROID L--Material Design具体解释(UI控 ...

  6. JVM参数调优:Eclipse启动实践

    本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...

  7. hudson添加批处理编译命令的注意事项

    作者:朱金灿 来源:http://blog.csdn.net/clever101 Hudson可以在Build Step里添加自定义的批处理命令,如下图: 需要注意的是这些批处理命令并不能识别huds ...

  8. String中substring方法内存泄漏问题

    众所周知,JDK中以前String类中的substring方法存在内存泄漏问题,之所以说是以前,是因为JDK1.7及以后的版本已经修复了,我看都说JDK1.6的版本也存在这个问题,但是我本机上安装的1 ...

  9. JPEG图像扩展信息读取和修改

    最近,项目需要使用jpg图像信息被写入(非水印),经过研究发现,Android已封装的读者jpg图片扩展信息api(ExifInterface). 通讯api住址:http://developer.a ...

  10. 一组西门子S7 报文

    03 00 00 16 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A(第一次握手报文) 03 00 00 16 11 D0 00 01 0 ...