文件上传下载

SpringMVC封装了Tomcat的上传文件功能

MultipartResolver接口

  • MultipartResolver接口定义了文件上传过程中的相关操作,并对通用性操作进行了封装
  • MultipartResolver接口底层实现类CommonsMultipartResovler
  • CommonsMultipartResovler并未自主实现文件上传下载对应的功能,而是调用了apache的文件上传下载组件

pom.xml

  <dependencies><!-- servlet3.0规范的坐标 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--jsp坐标--><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency><!--spring的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version></dependency><!--springmvc的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!--文件上传下载--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency></dependencies><build><!--设置插件--><plugins><!--具体的插件配置--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build>

SpringMVC配置

    <mvc:annotation-driven/><context:component-scan base-package="com.itzhuzhu"/><!--配置文件上传处理器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--设置上传大小--><property name="maxUploadSize" value="1024000000"/></bean>

控制器

@RequestMapping(value = "/fileupload")
public void fileupload(MultipartFile file){// transferTo上传文件用的file.transferTo(new File("file.png"));
}

page.jsp

<%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %>
<h1>测试文件上传下载功能!</h1>

fileupload.jsp

<%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %><form action="/fileupload" method="post" enctype="multipart/form-data"><%--文件上传表单的name属性值一定要与controller处理器中方法的参数对应,否则无法实现文件上传--%>上传LOGO:<input type="file" name="file"/><br/>上传照片:<input type="file" name="file1"/><br/>上传任意文件:<input type="file" name="file2"/><br/><input type="submit" value="上传"/>
</form>

文件上传注意事项

  1. 文件命名问题, 获取上传文件名,并解析文件名与扩展名
  2. 文件名过长问题(可以把用户上传的文件名保存到数据库,用UUID生成一个新的文件名,代替它。)
  3. 文件保存路径
  4. 重名问题
@RequestMapping(value = "/fileupload")
//参数中定义MultipartFile参数,用于接收页面提交的type=file类型的表单,要求表单名称与参数名相同
public String fileupload(MultipartFile file,MultipartFile file1,MultipartFile file2, HttpServletRequest request) throws IOException {System.out.println("file upload is running ..."+file);//        MultipartFile参数中封装了上传的文件的相关信息//        System.out.println(file.getSize());  文件大小//        System.out.println(file.getBytes().length);  文件所有的字节都在这个里面//        System.out.println(file.getContentType());   文件的类型//        System.out.println(file.getName());    file文件名//        System.out.println(file.getOriginalFilename());   上传的文件名//        System.out.println(file.isEmpty());   是否为空//首先判断是否是空文件,也就是存储空间占用为0的文件if(!file.isEmpty()){//如果大小在范围要求内正常处理,否则抛出自定义异常告知用户(未实现)//获取原始上传的文件名,可以作为当前文件的真实名称保存到数据库中备用String fileName = file.getOriginalFilename();//设置保存的路径String realPath = request.getServletContext().getRealPath("/images");//保存文件的方法,指定保存的位置和文件名即可,通常文件名使用随机生成策略产生,避免文件名冲突问题file.transferTo(new File(realPath,file.getOriginalFilename()));}//测试一次性上传多个文件if(!file1.isEmpty()){String fileName = file1.getOriginalFilename();//可以根据需要,对不同种类的文件做不同的存储路径的区分,修改对应的保存位置即可String realPath = request.getServletContext().getRealPath("/images");file1.transferTo(new File(realPath,file1.getOriginalFilename()));}if(!file2.isEmpty()){String fileName = file2.getOriginalFilename();String realPath = request.getServletContext().getRealPath("/images");file2.transferTo(new File(realPath,file2.getOriginalFilename()));}// 重名的问题:不使用用户上传的文件名,把上传的文件名封装成一个变量,再使用UUID重新赋一个名,这样用户的是用户的,服务器的是服务器的String uuid = UUID.randomUUID().toString().replace("-","").toUpperCase();return "page.jsp";
}

使用SpringMVC模拟文件上传与下载案例相关推荐

  1. springMVC的文件上传于下载

    springMVC的文件上传于下载 1.springmvc 文件的上传也是借助于两个工具所以需要添加两个jarapache-commons-fileupload.jarapache-commons-i ...

  2. 通过SpringMVC实现文件/多文件上传与下载案例

    在web开发中一般会有文件上传的操作 一般JavaWeb开发中文件上传使用的 Apache组织的Commons FileUpload组件 SpringMVC中使用 MultipartFile file ...

  3. Java网络编程实现文件上传和下载案例详解

    客户端: 文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据 明确: 数据源:c:\1.jpg 目的地:服务器 实现步骤: 1.创建一个本地字节输入流FileInputStream ...

  4. SpringBoot实现文件上传和下载

    文件上传需要使用到 MultipartResolver接口. Spring MVC 使用 MultipartResolver接口的实现类:CommonsMultipartResolver .Commo ...

  5. SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载

    系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...

  6. SpringMVC 文件上传及下载

    文件下载 inline 访问资源时如果没有设置响应头Content-Disposition,浏览器默认按照inline进行处理 inline:能显示就显示,不能显示就下载 响应头 只需修改响应头Con ...

  7. SpringMvc文件上传和下载

    最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...

  8. 最全面的SpringMVC教程(五)——文件上传与下载

    前言 本文为 [SpringMVC教程]文件上传与下载 相关知识,具体将对使用MultipartResolver处理文件上传的步骤,两种文件下载方式(直接向response的输出流中写入对应的文件流. ...

  9. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!-配置文件上传解释器 --> <mvc:annotation-driven>&l ...

最新文章

  1. 冰刃——IceSword
  2. 集美大学教务处验证码识别(一)
  3. 利用photoshop制作gif图片
  4. Linux的proc文件系统详解
  5. 计组之存储系统:3、主存与CPU的链接(字扩展、位扩展、字位扩展、74LS138)
  6. Linux设置 cockpit 自动开机启动
  7. Tomcat本地正常!但是部署到服务器后,mysql插入中文乱码问题解决!
  8. unity手机 通过php连接mysql_如何从Unity连接到数据库
  9. Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解
  10. 【计算机专业日志100篇ctrlc、ctrlv】
  11. CCF中学生计算机程序设计入门篇练习2.4.2(NOI 1002 三角形) pascal
  12. hibernate 检索策略
  13. CF235C Cyclical Quest
  14. vip地址能ping不通_ping不通地址
  15. Java爬去教务系统后怎么发布_GitHub - canliture/CrawlerCourseTable: 课程表的java爬虫实现--基于“强智教务系统”...
  16. fx3u4ad一adp说明书_FX3U-4AD-ADP使用手册三菱FX3U-4AD-ADP用户手册 - 三菱
  17. Verilog语言注意事项
  18. photoshop名人堂
  19. 城市交通公众号2021年头部内容发布
  20. 序列化和反序列化的底层实现原理是什么?

热门文章

  1. 套口机跳针修理带图_套口机维修注意事项
  2. 一句话概括自动装箱/拆箱
  3. java简单密码验证程序
  4. php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件
  5. java script的trim_Javascript中实现trim()函数的两种方法
  6. IOS 模态弹窗与操作版使用 UIAlertController
  7. 阿联酋esma认证怎么做_百度爱采购企业认证是怎么做的?这些你要知道!
  8. 2021爱智先行者—(1)开箱点评
  9. typescript 接口 java_Typescript基础(4)——接口
  10. php验证密码后跳转_php-laravel框架用户验证(Auth)模块解析(四)忘记密码