这篇文章主要介绍“SpringMVC文件上传与下载怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringMVC文件上传与下载怎么实现”文章能帮助大家解决问题。文件上传是项目开发中最常见的功能之一 ,SpringMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。表单中enctype属性的详细说明:application/x-www=form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。text/plain:除了把空格转换为 “+” 号外,其他字符都不做编码处理,这种方式适用直接通过表单发送邮件。一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。而Spring MVC则提供了更简单的封装。Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。【MultipartResolver】用于处理文件上传。当收到请求时,DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中【是否包含文件】。如果请求数据中包含文件,则调用 Multipart免费云主机域名Resolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller。我们可以看到DispatcherServlet的核心方法中第一句就是如下的代码:注意: MultipartResolver 默认不开启,需要手动开启。文件上传对前端表单有如下要求:为了能上传文件,必须将表单的【method设置为POST】,并将enctype设置为【multipart/form-data】。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器。对表单中的 enctype 属性的详细说明:application/x-www-form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。1)导入这个【commons-fileupload】jar包,Maven会自动帮我们导入它的依赖包【commons-io】2)配置bean:multipartResolver注意: 这个bena的id必须为:multipartResolver , 否则上传文件会报400的错误!CommonsMultipartFile 的常用方法:String getOriginalFilename():获取上传文件的原名InputStream getInputStream():获取文件流void transferTo(File dest):将上传文件保存到一个目录文件中(3)编写前端页面(4)编写Controller类(5)测试上传文件(6)采用file.Transto 来保存上传的文件编写Controller类:小知识: 我们在文件上传可以考虑以下几点:(1)文件的原始信息,或者叫文件的元数据是不是可以存在数据库,具体应该怎么做?(2)文件的上传目录能不能写在配置文件当中,这个应该怎么做?(3)文件上传到服务器后可不可以安装一定的规则分目录存储,比如日期?(4)思考怎么使用阿里云的oss进行图片存储?第一种可以直接向response的输出流中写入对应的文件流第二种可以使用 ResponseEntity
这篇文章主要讲解了“C++可排序的最大块数问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++可排序的最大块数问题怎么解决”吧!This question is the same as “Max C…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。