博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC环境中的文件上传功能实现
阅读量:4634 次
发布时间:2019-06-09

本文共 3000 字,大约阅读时间需要 10 分钟。

     在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像、商品图片、邮件附件等等。其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上传和下载有或多或少的封装,这里就以Spring MVC环境中文件的上传为例,讲解Spirng MVC环境下的文件上传功能实现。

一、客户端编程

      由于多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单。同时该表单必须满足以下3个条件:

  • form表单的method属性设置为post;
  • form表单的enctype属性设置为multipart/form-data;
  • 提供<input type="file" name="fileName" />的文件上传输入框。

在HTML5之前,如果想要上传多个文件,必须使用多个<input>元素。但是在HTML5中,在<input>元素配置multiple属性即可进行多个文件的上传。在HTML5中编写以下任意一行代码,便可生成一个按钮供选择多个文件:

  • <input type="file" name="fileName" multiple />
  • <input type="file" name="images" multiple="multiple" />
  • <input type="file" name="images" multiple="" />

具体代码示例如下:

二、springmvc-config.xml配置文件配置

      当客户端form表单的enctype属性为multipart/form-data时,浏览器就会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP请求。Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。

在Sring MVC中使用MultipartResolver也非常简单,只需要在Spring MVC配置文件springmvc-config.xml中定义MultipartResolver接口实现类即可,示例如下:

    注意:

由于MultipartResolver实现类CommonsMultipartResolver内部是引用multipartResolver字符串获取该实现类对象并完成文件上传操作的,所以在配置CommonsMultipartResolver时必须指定该bean的id为multipartResolver。另外由于MultipartResolver实现类CommonsMultipartResolver是Spring MVC内部通过Apache Commons FileUpload技术实现的。因此Spirng MVC的文件上传还需要依赖Apache Commons FileUpload的组件,即需要导入支持文件上传和下载的JAR包,具体如下:

  •  commons-fileupload.jar
  •  commons-io.jar

三、后台文件下载实现(MultipartFile接口介绍)

当完成上述客户端代码的编写及文件上传组件的配置后,在Spring MVC中处理已经上传的文件就十分容易了,上传到Spring MVC程序中的文件会被封装到一个MultipartFile对象中,然后开发者通过该对象的方法就可以进行后续相关处理了。

 编写后台文件上传控制器类及方法,具体示例如下:

/** * 向文件上传页面跳转 */@RequestMapping("/toFileUpload")public String toFileUpload( ){    return "fileUpload";}/** * 接收文件上传请求 */@RequestMapping("/fileUpload")public String fileUpload(List
images){ //对上传图像进行解析操作 if(images !=null && images.size()>0){ for (MultipartFile image : images) { //获取上传文件的原始名称 String originalFilename = image.getOriginalFilename(); //设置上传文件的保存地址目录 String dirPath="D:\\fileUpload\\"; File file =new File(dirPath); //如果保存文件的地址不存在,就先创建目录 if(!file.exists()){ file.mkdirs(); } //使用UUID重新命名上传的文件名称(看公司需求,也可以用日期时间) String newFilename= UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf(".")); try { //使用MultipartFile接口的方法完成文件上传到指定位置 image.transferTo(new File(dirPath+newFilename)); //文件上传成功后,需要将文件存放路径存入数据库中 //TODO,省略 } catch (Exception e) { e.printStackTrace(); //当文件上传出现异常,则重定向到文件上传页面 return "redirect:toFileUpload"; } } } //文件上传成功后,跳转到成功页面 return "success";}

四、效果演示(读者可以自己编写项目和jsp页面)

    部署并启动web服务器,在浏览器地址啦输入地址:http://localhost:8080/webname/toFileUpload后(读者根据自己的项目和路径进行访问),浏览器的显示效果如下图所示

   上面我选择了上传2个文件,然后点击提交后,即可完成上传。读者操作后可自行到指定上传位置进行验证。

   至此,Sring MVC环境下文件上传功能代码即已实现。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/com-itheima-crazyStone/p/6739862.html

你可能感兴趣的文章
bzoj2120
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
object-c中管理文件和目录:NSFileManager使用方法
查看>>
Kibana:分析及可视化日志文件
查看>>
nodejs pm2使用
查看>>
物联网兴起 嵌入式系统安全日益受关注
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
第三周-第08章节-Python3.5-文件修改详解
查看>>
npm修改淘宝原
查看>>
通过代理进行页面传值
查看>>
Vue-Resource请求PHP数据失败的原因
查看>>
搭建vue.js环境
查看>>
《xxx系统》分析
查看>>
/var/run/utmp文件操作函数
查看>>
经1503 20151453 张开拓
查看>>