一:文件上传

 1:创建文件上传的jsp文件(test_fileupload.jsp)

<body>
<from enctype="multipart/form-data" method="post" action="/upload.do">选择图片:<input type="file" name="photo"><input type="submit" value="上传">
</from>
</body>

2:创建文件上传的Controller

在上传文件的方法中添加参数 MultiparFile,该参数本身是一个接口,该接口提供了文件上传的方法

// 获得文件名
getOriginalFilename()// 判断是否上传了文件,如果没有选择文件上传的话,此时结果为true
isEmpty()//获得上传文件的文件类型
getContentType()// 将文件上传至指定目录中
transferTo(File file)// 获取表单中input的name值
getName()// 获取上传文件的byte数组
getBytes()// 获取上传文件的InputStream对象
getInputStream()

方法中需要的另一个参数为 HttpSession,其作用是获取服务器中用来存放上传文件的路径

package com.doaoao.comtroller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession;
import java.io.File;@Controller
public class UploadController {@RequestMapping("/upload.do")public ModelAndView upload(MultipartFile photo, HttpSession session) throws Exception{ModelAndView mv = new ModelAndView();// 判断用户是否上传文件if(!photo.isEmpty()){// 取得服务器上传的文件路径String path = session.getServletContext().getRealPath("/upload");// 获取文件名称String filename = photo.getOriginalFilename();// 限制文件的上传类型if("image/png".equals(photo.getContentType())){File file = new File(path,filename);photo.transferTo(file);}else{// 文件上传失败时mv.addObject("msg","请选择文件格式为png");mv.setViewName("/upload_fail");return mv;}}else{mv.addObject("msg","请上传一张png格式图片");mv.setViewName("/upload_fail");return mv;}// 文件上传成功时mv.setViewName("/upload_success");return mv;}
} 

3:两种文件上传方式

  # 1 使用 apache中的commons-io 和 commons-fileupload实现文件上传

  # 2 使用servlet3.0实现文件上传

## 第一种文件上传方式:使用 apache中的commons-io 和 commons-fileupload实现文件上传

<!-- 导入相关jar包 -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version>
</dependency>

修改配置文件 springmvc.xml

<!--注册multipartResolver,由DispatcherServlet来负责调用,id的名称必须写为 multipartResolve-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--设置字符编码防止文件名乱码--><property name="defaultEncoding" value="utf-8"/><!--设置上传文件的总大小,单位是字节b--><property name="maxUploadSize" value="1048576"/><!--设置单个上传文件的大小,单位是字节b--><property name="maxUploadSizePerFile" value="1048576"/><!--设置内存缓冲区的大小,当超过该值的时候会写入到临时目录--><property name="maxInMemorySize" value="1048576"/><!--设置临时目录--><property name="uploadTempDir" value="tempupload"/><!--默认是false,如果设置为true的话,不会将文件路径去除,在IE浏览器下上传时会将路径名也作为文件名上传--><property name="preserveFilename" value="false"/><!--是否使用懒加载,默认是false--><property name="resolveLazily" value="true"/>
</bean>

  上方配置文件中设置临时目录的作用:

    1:提高安全性:将文件上传到临时目录,相当于对客户端隐藏了文件真实存放的目录

    2:便于管理:当用户取消文件上传或文件上传失败时,可直接操作临时目录即可,无需对真实目录进行操作

## 第二种文件上传的方式:使用servlet3.0实现文件上传

修改web.xml配置文件的内容

<!--使用servlet3.0实现文件上传-->
<multipart-config><!--临时文件路径,临时文件路径需配置在第一行--><location>/temp</location><!--单个上传文件的最大值,单位是byte--><max-file-size>100</max-file-size><!--总上传文件的最大值--><max-request-size>52428800</max-request-size><!--内存缓冲区的大小,当超过该值时,会写入到临时文件中,单位是byte--><file-size-threshold>1024</file-size-threshold>
</multipart-config>

修改配置文件 springmvc.xml

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

二:上传多个文件

1:修改jsp文件种的内容

<from enctype="multipart/form-data" method="post" action="/upload.do">选择图片:<input type="file" name="photos">选择图片:<input type="file" name="photos">选择图片:<input type="file" name="photos"><input type="submit" value="上传">
</from>

2:在Controller种添加方法,方法种添加参数 MultipartFile[],并在参数前加上注解@RequestParam

package com.doaoao.comtroller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession;
import java.io.File;@Controller
public class UploadController {@RequestMapping("/upload.do")public ModelAndView upload(@RequestParam MultipartFile[] photos, HttpSession session) throws Exception{ModelAndView mv = new ModelAndView();// 取得服务器上传的文件路径String path = session.getServletContext().getRealPath("/upload");for(MultipartFile photo:photos) {// 判断用户是否上传文件if (!photo.isEmpty()) {// 获取文件名称String filename = photo.getOriginalFilename();// 限制文件的上传类型if ("image/png".equals(photo.getContentType())) {File file = new File(path, filename);photo.transferTo(file);} else {// 文件上传失败时mv.addObject("msg", "请选择文件格式为png");mv.setViewName("/upload_fail");return mv;}} else {mv.addObject("msg", "请上传一张png格式图片");mv.setViewName("/upload_fail");return mv;}}// 文件上传成功时mv.setViewName("/upload_success");return mv;}
}

...

本笔记参考自:小猴子老师教程 http://www.monkey1024.com

转载于:https://www.cnblogs.com/Doaoao/p/10693894.html

SpringMVC_文件上传相关推荐

  1. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  2. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  3. Springboot 多文件上传

    其实多个文件和单个文件上传是一样的,可以使用同一个Controller 添加依赖 <!-- https://mvnrepository.com/artifact/commons-fileuplo ...

  4. django文件上传

    Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...

  5. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  6. 模拟文件上传(一):手动文件上传

    关于上传文件,首先我的第一个案例是一个文本文件的上传,简单容易上手! 首先我们上传文件肯定就属于实体内容部分了:所以不能过GET方式请求了,要通过POST方式请求: 因为: 1.get方式是URL传值 ...

  7. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  8. 转 [JAVA] 使用 common-fileupload 实现文件上传

    就在前段时间,还在苦于找到不到合适的上传组件,虽然很早就知道了 common-fileupload,但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload,历尽艰辛终于找到了它 ...

  9. 三层架构中ajax,基于mvc三层架构和ajax技术实现最简单的文件上传

    前台页面提交文件 文件操作 上传文件 //上传文件 function upFile() { var file = document.getElementById("UpFile") ...

最新文章

  1. [JAVAEE] Thymeleaf 基本语法:常用表达式
  2. 智源新闻 | 麻省理工学院教授Max Tegmark报告交流会在北京举行
  3. 让汽车软件进入 iPhone 时代!
  4. javascript es6 == === is 区别
  5. Yii2使用Cookie的注意事项
  6. 计算机组成原理第6章-总线
  7. 五十六、教用Python中的turtle海龟画图(上篇)
  8. R-3.1.1 编译安装
  9. 高级java必须清楚的概念:原子性、可见性、有序性
  10. Android10创建文件Permission denied 失败
  11. 如何在内存序列化中使用Java深克隆对象
  12. pythonwebui自动化_python+selenium实现web端UI自动化测试
  13. 条件测试 linux,Linux的条件测试
  14. python全栈开发网络_Python 全栈开发:网络编程
  15. Deep Adversarial Decomposition: A Unified Framework for Separating Superimposed Images 论文阅读笔记
  16. 基于python的论文前言怎么写_毕业论文前言怎么写
  17. 罗兰贝格 | 适者生存:VUCA的世界
  18. PTA-链表学习-----奇数值结点链表
  19. ELK ILM 策略实现冷热数据分离 持续更新
  20. Delphi FastReport4.5安装说明

热门文章

  1. [NOTE] DSVW靶场练习笔记
  2. python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...
  3. [BUUCTF-pwn]——axb_2019_fmt64
  4. Linux下的/bin、/sbin、/usr/bin、/usr/sbin目录
  5. How-to: Use the ShareLib in Apache Oozie
  6. camel route 创建顺序
  7. Java语言语法语义分析器设计与实现
  8. Drools 5.1.1(一)
  9. SpringCloud学习(八)消息总线(Spring Cloud Bus)(Finchley版本)
  10. 【转】xargs命令详解,xargs与管道的区别