5th May
在springmvc.xml中配置 “解析器”
mvc中处理还需要spring框架提供的multipart通用的【CommonsMultipartResolver】通用多部份解析器处理上传数据
org.springframework.web.multipart.commons.CommonsMultipartResolver里面有三个小东西:
下的property:
(1)最大上传尺寸 maxUploadSize
(2)缓冲尺寸 maxInMemorySize(向内的内存使用)
(3)默认字符集(编码类型) defaultEncoding
JSP配置表单:
【input type = file】表示这是一个文件
【method设置“post”】(get只能拿到值为文件名的字符串)
【enctype=“multipart/form-data”】以二进制来传输数据
servlet控制器:
重要:@RequestParam MultipartFile
1.对应页面上file控件的name属性
2.从页面到controller接收到的文件就是“多部份文件”,RequestParam注解请求参数。
3.必须设置为请求参数,如果不写的话,他会认为我们的是一个响应参数。页面上面会报错:“Required MultipartFile parameter ‘file’ is not present”
存储到本地(输出流对接)—— 文件的名称存储到数据库(String存到数据库中)
存储到数据库(byte[])—— 缺点(数组的大小 == 文件的大小)
(简单的说就是写输入流、输出流,以及完成输入流read、输出流write的方法)
文件尽量保持【字节流】,避免所有编码问题(字节是最小单位,字符可能会打乱文件字节状态,因为字符比字节大一倍)
通过输入流把用户上传文件读入JVM内存,再通过输出流输出到工程文件夹下
实际开发时使用工具——fileupload来上传
package com.haha.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;@Controllerpublic class dispacherController { @RequestMapping("/laizheli.do") public ModelAndView find(@RequestParam MultipartFile myFile) { ModelAndView mav = new ModelAndView(); InputStream is = null; BufferedInputStream bis = null; FileOutputStream fos = null; try { System.out.println("\n\n\n文件名称以及文件大小为:" + myFile.getOriginalFilename()); System.out.println("\t\t\t\t\t" + myFile.getInputStream().available());// 写一个输入流 is = myFile.getInputStream(); byte[] buffer = new byte[1024]; bis = new BufferedInputStream(is);// 写关于输出的东西: String fileType = "newFile.jpg"; String src = "C:/Users/willorn/Desktop/" + fileType; fos = new FileOutputStream(new File(src));// 向外面写文件 int len = 0; while ((len = bis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { if (fos != null) try {fos.close(); } catch (Exception e) {e.printStackTrace(); } if (bis != null) try {bis.close(); } catch (Exception e) {e.printStackTrace(); } if (is != null) try {is.close(); } catch (Exception e) {e.printStackTrace(); } } mav.setViewName("show.jsp"); return mav; }}
<form action="laizheli.do" method="post" enctype="multipart/form-data"> <input name="myFile" type="file"/> <input value="提交 " type="submit"/></form>
<context:component-scan base-package="com.haha.controller" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <property name="maxUploadSize" value="1048576" /> <property name="maxInMemorySize" value="51200" /> <property name="defaultEncoding" value="utf-8" /> bean>
简单的用servlet来告诉一下tomcat就行。。。还有一个简单的filter设置编码方式
<servlet> <servlet-name>springMVCservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:config/springmvc.xmlparam-value> init-param> servlet> <servlet-mapping> <servlet-name>springMVCservlet-name> <url-pattern>*.dourl-pattern> servlet-mapping> <filter> <filter-name>encodingfilter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class> <init-param> <param-name>encodingparam-name> <param-value>utf-8param-value> init-param> filter> <filter-mapping> <filter-name>encodingfilter-name> <url-pattern>/url-pattern> filter-mapping>
Required MultipartFile parameter 'file' is not present 今天还学习到一个新单词:“TOC”是“Table Of Contents”的缩写,意思是“目录”