Springmvc文件上传:
CommonsMultipartResolver类
<form >表当中enctype=“”application/x-www-form-urlencoded” 该默认的属性是按照字符流读取的。文件上传需要使用字节流读取
怎我们需要更改一下enctype属性的类型。更改值,将enctype=”multipart/form-data” 这样就是照字节流读取了。
1. 导入jar:apache下的fileupload.jar ,io.jar
2. 创建jsp页面
<form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="submit" value="upload"/> </form> |
3. 配置controller,注意:MultipartFile 的接口对象名 必须跟<inputtype="file" name="file"/>属性名一致!
@RequestMapping("upload") public String upload(MultipartFile file) throws IllegalStateException, IOException{ // 取得到文件名 System.out.println(file.getOriginalFilename()); // 文件的类型 可以加以对上传的文件类型进行限制! System.out.println(file.getContentType()); //image/jpeg
String filename = file.getOriginalFilename(); // 要知道文件保存的路径 file.transferTo(new File("F:/"+filename)); return "up"; } |
4. 配置MultipartFile的实现类 ,在springmvc的核心配置文件 ,配置该实现类的时候Id必须是multipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置字符集 --> <property name="defaultEncoding" value="utf-8"></property> <!-- 限制文件上传的大小 单位byte--> <property name="maxUploadSize" value="102400"></property> <!-- 设置内存大小 单位byte --> <property name="maxInMemorySize" value="15000"></property> </bean> |
5. 测试:
6. 上传文件的时候,可能遇到的问题!解决方案:参考4
1) 可能会出现中文乱码!
2) 会出现文件大小限制!
7. 配置错误页面信息在web.xml
<error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> |
Springm文件下载
Springmvc没有对文件下载提供特殊的方式,这里的文件下载跟我们的servlet的文件下载是一样的!
文件下载:有的浏览会自动带下载功能! 当点击下载的时候,如果能在浏览器上显示,则显示。如果下载的资源在浏览器上不能显示,则默认就是下载!
设置头部信息:response.setHeader("Content-Disposition","attachment; filename=\"" +fileName + "\"");
*用文件下载的时候,可以选用缓冲流的。好处:可以提高程序性能!
Jsp页面
<form action="download" method="post" enctype="multipart/form-data"> <input type="submit" value="download"/> </form> |
Controller
@RequestMapping("download") public void download(HttpServletRequest request,HttpServletResponse response) throws Exception{ //1.要知道下载的文件 File file = new File("F:/gaoyy.jpg"); //2.使用io流中的FileInputStream来读取文件 FileInputStream is = new FileInputStream(file); //3.创建一个ServletOutputStream对象,使用response.getOutputStream(); ServletOutputStream os = response.getOutputStream();
//4.给下载文件起个别名,为什么?使用时间 String fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".jpg"; //5.设置下载响应头信息文件下载的响应头 response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); //6.通过io流的方式进行循环读取进行下载! // 创建一个字节数组吧 字符串的长度.length(), 数组.length, 集合size(), 文件长度.length() byte [] length = new byte[(int) file.length()]; int len = 0; // 将字节数组放到is中。 while ((len = is.read(length))!=-1) { os.write(length, 0, len); } os.flush(); os.close(); is.close(); } |