SpringMVC文件上传
SpringMVC对文件的上传下载,做了自己较为方便的操作方式,一下是我近期学习的小记,希望能对大家有所帮助。
- 文件的上传主要包含一下几个步骤:
- 1、导入需要使用的jar包;(只要是使用别人的内容就要使用导包,导包)
- 2、配置SpringMVC的配置文件
- 3、书写上传页面
- 4、编写上传Controller
1、导入jar包
- commons-fileupload-1.3.1.jar
- commons-io-2.4.jar
当然SpringMVC的基础包也是要导入的
2、配置SpringMVC的配置文件
1 2 34 5 6 7 8
3、书写上传页面
其中要特别注意的是:文件上传,需要设定请求方式为POST
并且需要将enctype属性设为“multipart/form-data" ,其不会对字符进行编码,,一般用于传输二进制文件(图片、视频、、、)。其在默认情况下是application/x-www-form-urlencoded:表单数据被编码为名称/值对,这是默认的编码方式(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值), text/plain:表单数据中的空格转换为 "+" 加号,但不对特殊字符编码。(get方式会这样,post时不会)。其个中区别我也不是很理解,去发掘学习吧。
1
4、编写上传Controller
在文件上传中我使用了两种方式,一种是原生的方式,一种是Spring中CommonsMultipartFile 提供的方法。
1 //文件上传 2 3 @RequestMapping(value="/testUpLoad",method = RequestMethod.POST) 4 5 public String testUpLoad(@RequestParam(value="myfile",required=false) 6 CommonsMultipartFile myfile,@RequestParam(value="mydesc") String mydesc, 7 HttpServletRequest request){ 8 9 if(myfile.isEmpty()){10 System.out.println("文件不存在");11 } else{12 13 //获取上传的文件名14 String fileName = myfile.getOriginalFilename();15 System.out.println("上传的文件名为: "+fileName);16 17 /*重新定义上传文件名,也就是存储时的名字,18 *这里了避免上传后覆盖原本的文件,就是用了UUID的方式更改了命名 19 */20 String myFileName = UUID.randomUUID().toString().replace("-", "") +fileName;21 System.out.println("重新定义的上传文件的名 :"+myFileName);22 23 //服务器地址 获取服务器的地址首先要在其WEB-INF目录下存在一个upload文件,否则会出错24 String serverPath = request.getServletContext().getRealPath("/WEB-INF/upLoad");25 System.out.println("服务器文件存储的地址:"+serverPath);26 27 //以下是原生的方法28 InputStream iS =null;29 FileOutputStream fOS = null;30 31 try {32 /*创建输出流,并且新建了文件 地址目录是服务器目录,33 *文件名为刚才定下的新名字34 */35 fOS = new FileOutputStream(new File(serverPath,myFileName));36 //获取页面上选中文件的字节流37 iS = myfile.getInputStream();38 //使用存储缓冲39 byte[] by = new byte[2048];40 int len = iS.read(by);41 while(len!=-1){42 /*这里的len很有必要,在最后一次读取的时候可能没有将byte填满,43 * 因此就要将读入长度的内容写出。44 */ 45 fOS.write(by, 0, len);46 len = iS.read(by);47 }48 } catch (IOException e) {49 // TODO Auto-generated catch block50 e.printStackTrace();51 } finally {52 //关闭流53 try {54 if(fOS!=null){55 fOS.close();56 }57 if(iS!=null){58 iS.close();59 }60 }catch (IOException e) {61 // TODO Auto-generated catch block62 e.printStackTrace();63 }64 }65 }66 67 /* //下面是SpringMVC提供的方法 68 69 File upFile = null;70 //创建存储文件71 upFile = new File(serverPath,myFileName);72 if(!upFile.exists()){73 upFile.mkdirs();74 }75 try {76 //进行文件传输,Spring中提供的方法,直接将文件复制77 myfile.transferTo(upFile);78 } catch (IllegalStateException e1) {79 // TODO Auto-generated catch block80 e1.printStackTrace();81 } catch (IOException e1) {82 // TODO Auto-generated catch block83 e1.printStackTrace();84 }*/85 return "success";86 }
关于SpringMVC 文件上传基本就是这些,希望能对大家有所帮助,欢迎过路的各位指点批评。*