首页 > 其他分享 >springMVC上传文件

springMVC上传文件

时间:2023-01-11 01:11:06浏览次数:35  
标签:文件 springMVC 路径 对象 File 服务器 上传

前端页面:请求方式为:post 

        设置enctype属性(指定请求体的编码类型):默认值为application/x-www-form-urlencoded 普通字符方式编码

                             设置为multipart/form-data 按照二进制的方式进行编码(那些不是文件形式的表单项也是二进制的形式经行编码)

配置文件:导入jar包:commoms-fileupload(apache公司做的一个工具)

        spring配置文件的修改:添加multipart/form-data编码方式的解析器 class文件为commons下的CommonsMultipartResolver

                   初始化:指定普通表单项的解码字符集<property name="defaultEncoding" value="UTF-8">

后台控制器:通过@RequestParam()注解拿到前端页面传来的值(包括文件对象)

          文件对象的类型是固定的为 MultipartFile

          MultipartFile对象封装了很多方法 比如getBytes()对象 可以得到文件二进制数据的字节数组,getInputStream()得到读取文件数据的输入流对象transerTo()方法形参为File对象,将前端接收到的文件传入到这个File对象。

转存文件的三大去处:1、本地转存 设置好需要保存到的本地路径地址(基本不使用)

                       创建好File对象

                       利用transerTo()方法进行存储

                 问题:由于File对象的创建需要一个物理地址,但是对于不同的操作系统,物理地址的写法不同,代码的移植性差

                 引入虚拟路径(各个平台相同)动态获取不同平台时所使用的路径

                 虚拟路径:浏览器通过Tomcat服务器web应用中的资源时使用的路径

                 引入servletContext对象调用其getRealPath()方法 可以得到真实路径

                 问题:文件名字的选择,不能选择文件原始的文件名,因为存在文件名字相同可能会发生覆盖

                 为了避免同名文件覆盖,不使用orignalFilename获取原文件名

                 文件名通过UUID.randomUUID().toString.replace("-","");随机生成一个文件名

                 文件的扩展名:还是通过原始的orignalFilename()方法得到全部的名字再通过substring(name.lastIndexOf(.))方法得到最后                      一个.后面的数据即扩展名。

                本地转存的缺陷:1、因为他使用了虚拟地址,所以用户上传的全部文件都是存储在项目文件下(webapp下),当项目重新启动时文件会被全部删除 2、时间一长,项目的大小会变得特别大,对服务器的运行造成了很大的压力3、当项目以集群的方式运行时,用户上传文件只会通过负载均衡上传到某一个服务器实例 当用户需要打开这个文件时,负载均衡又只会去其中一个服务器实例中去找,可能就不是用户上传的那个服务器了导致了文件不同步的问题

                2、文件服务器(常用这种)

               当用户吧把文件从前端页面上传应用服务器(Tomcat)的缓冲区时,我再次将文件上传到文件服务器(专门存储文件的一个服务器,当重新启动服务器时不会发生丢失,集群项目时就这一个服务器也不会发生找不到文件,动态扩容方便)

                 文件服务器的类型:第三方平台:阿里的oss对象存储服务 七牛云

                          自己搭建服务器

                3、上传到其他模块

             当数据传递到应用服务器时,再次上传到别的模块

                利用MultipartFile接口的getResource()方法(具体方法参考getResource()方法的注释)

       

标签:文件,springMVC,路径,对象,File,服务器,上传
From: https://www.cnblogs.com/jiang-kai/p/17042658.html

相关文章