参考文章:

http://www.cnblogs.com/interdrp/p/6734033.html

方法一:                                                  

1)没有配置org.springframework.web.multipart.commons.CommonsMultipartResolver

2)MultipartFile转化为File的方式为:

MultipartFile file = multiRequest.getFile("imgFile");
CommonsMultipartFile cf= (CommonsMultipartFile) file;
DiskFileItem fi = (DiskFileItem ) cf.getFileItem();
File fs = fi.getStoreLocation();

代码例子1:保存用户信息,用户有照片

    //增加用户
@RequestMapping("/addUser")
@ResponseBody
public String addUser(HttpServletRequest request, HttpServletResponse response){
String username = "";
int age = 0;
String photoName = "";
byte[] photo = null; //创建一个通用的多部分解析器.
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //判断 request 是否有文件上传,即多部分请求...
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request); //获取普通表单的属性
username = multiRequest.getParameter("username");
String ageStr = multiRequest.getParameter("age");
if(ageStr!=null){
try{
age = Integer.parseInt(ageStr);
}catch(Exception e){
e.printStackTrace();
}
} //取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if(file != null){
//取得当前上传文件的文件名称
photoName = file.getOriginalFilename();
try {
InputStream inputStream = file.getInputStream();
photo = new byte[inputStream.available()];
inputStream.read(photo);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} User user = new User(username, age, photoName, photo); int count = userService.insertUser(user); if(count > 0){
return "success";
}else{
return "failed";
} }

代码例子2:上传压缩包zip或者rar;这里是单包上传(single),每个zip/rar下面直接是一个一个的jpg图片;

//上传图片zip/rar文件  --
@RequestMapping("/uploadImageFile")
@ResponseBody
public String uploadImageFile(HttpServletRequest request, HttpServletResponse response){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if(multipartResolver.isMultipart(request)){
MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);
String packageType = multiRequest.getParameter("packageType"); if(packageType.equals("single")){ //单包
MultipartFile file = multiRequest.getFile("imgFile");
if(file != null){
String packageName = file.getOriginalFilename(); //上传的包名
String iconName = productService.getIconNameByPackage(packageName); //获取该包下面的缩略图名称 if(packageName.matches(".*\\.zip")){ //是zip压缩文件
try{
ZipInputStream zs = new ZipInputStream(file.getInputStream());
BufferedInputStream bs = new BufferedInputStream(zs);
ZipEntry ze;
byte[] picture = null;
while((ze = zs.getNextEntry()) != null){ //获取zip包中的每一个zip file entry
String fileName = ze.getName(); //pictureName
picture = new byte[(int) ze.getSize()]; //读一个文件大小
bs.read(picture, 0, (int) ze.getSize());
ImageFile image = new ImageFile(packageName, "N", fileName, picture); //保存image,非缩略图
productService.insertImage(image); if(fileName.equals(iconName)){ //这个picture要作为缩略图,进行裁剪、保存
String thumbName = ImageUtil.createThumbFileName(fileName); //生成缩略图名称
InputStream is = new ByteArrayInputStream(picture);
byte[] thumbPic = ImageUtil.clipImage(is, 100, 100, "jpg"); //进行裁剪
ImageFile thumbImage = new ImageFile(packageName, "Y", thumbName, thumbPic);
productService.insertImage(thumbImage);
}
}
bs.close();
zs.close();
return "success";
}catch(IOException e){
e.printStackTrace();
}
}else if(packageName.matches(".*\\.rar")){ //是rar压缩文件
try {
//MultipartFile file 转化为File 有临时文件产生:
CommonsMultipartFile cf= (CommonsMultipartFile) file;
DiskFileItem fi = (DiskFileItem ) cf.getFileItem();
File fs = fi.getStoreLocation();
Archive archive = new Archive(fs);
ByteArrayOutputStream bos = null;
byte[] picture = null;
FileHeader fh = archive.nextFileHeader();
while(fh!=null){
String fileName = fh.getFileNameString();
bos = new ByteArrayOutputStream();
archive.extractFile(fh, bos);
picture = bos.toByteArray();
ImageFile image = new ImageFile(packageName, "N", fileName, picture); //保存image,非缩略图
productService.insertImage(image);
fh = archive.nextFileHeader();
} bos.close();
archive.close();
return "success";
} catch (RarException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
}
}
} return "failed";
}

方法二:配置org.springframework.web.multipart.commons.CommonsMultipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>

代码例子:

//上传文件zip/rar  方法二  配置org.springframework.web.multipart.commons.CommonsMultipartResolver
@RequestMapping("/uploadImageFile2")
@ResponseBody
public String uploadImageFile2(HttpServletRequest request, HttpServletResponse response){
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
String packageType = multiRequest.getParameter("packageType");
if(packageType.equals("single")){ //单包
MultipartFile file = multiRequest.getFile("imgFile");
if(file != null){
String packageName = file.getOriginalFilename(); //上传的包名
String iconName = productService.getIconNameByPackage(packageName); //获取该包下面的缩略图名称 if(packageName.matches(".*\\.zip")){ //是zip压缩文件
try{
ZipInputStream zs = new ZipInputStream(file.getInputStream());
BufferedInputStream bs = new BufferedInputStream(zs);
ZipEntry ze;
byte[] picture = null;
while((ze = zs.getNextEntry()) != null){ //获取zip包中的每一个zip file entry
String fileName = ze.getName(); //pictureName
picture = new byte[(int) ze.getSize()]; //读一个文件大小
bs.read(picture, 0, (int) ze.getSize());
ImageFile image = new ImageFile(packageName, "N", fileName, picture); //保存image,非缩略图
productService.insertImage(image); if(fileName.equals(iconName)){ //这个picture要作为缩略图,进行裁剪、保存
String thumbName = ImageUtil.createThumbFileName(fileName); //生成缩略图名称
InputStream is = new ByteArrayInputStream(picture);
byte[] thumbPic = ImageUtil.clipImage(is, 100, 100, "jpg"); //进行裁剪
ImageFile thumbImage = new ImageFile(packageName, "Y", thumbName, thumbPic);
productService.insertImage(thumbImage);
}
}
bs.close();
zs.close();
return "success";
}catch(IOException e){
e.printStackTrace();
}
}else if(packageName.matches(".*\\.rar")){ //是rar压缩文件   //....和上面一样。 }
}
} return "failed";
}

最后补充上面用到的工具类:ImageUtil.java(里面有对图片裁剪的方法)

package com.cy.util;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream; import javax.imageio.ImageIO; public class ImageUtil {
/**
* 判断压缩文件的类型
*/ /**
* 生成缩略图名称
* @param srcFileName
* @return
*/
public static String createThumbFileName(String srcFileName){
StringBuffer thumbFileName = new StringBuffer(); int pos = srcFileName.lastIndexOf(".");
thumbFileName.append(srcFileName.substring(0, pos));
thumbFileName.append("_small");
thumbFileName.append(srcFileName.substring(pos, srcFileName.length()));
return thumbFileName.toString();
} /**
* 对图片进行剪裁
* @param is 图片输入流
* @param width 裁剪图片的宽
* @param height 裁剪图片的高
* @param imageFormat 输出图片的格式
* @return
*/
public static byte[] clipImage(InputStream is,int width, int height, String imageFormat){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
// 构造Image对象
BufferedImage src = javax.imageio.ImageIO.read(is);
// 缩小边长
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 绘制 缩小 后的图片
tag.getGraphics().drawImage(src, 0, 0, width, height, null);
ImageIO.write(tag, imageFormat, bos);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
} return bos.toByteArray();
}
}

------------

springMvc上传文件、读取zip/rar文件的更多相关文章

  1. SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html

    SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...

  2. SpringMVC上传文件(图片)并保存到本地

    SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...

  3. springmvc上传文件,抄别人的

    SpringMVC中的文件上传 分类: SpringMVC 2012-05-17 12:55 26426人阅读 评论(13) 收藏 举报 stringuserinputclassencoding 这是 ...

  4. 2. SpringMVC 上传文件操作

    1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 com.springsource.com.mc ...

  5. 使用springMVC上传文件

    control层实现功能: @RequestMapping(value="upload2") public String upLoad2(HttpServletRequest re ...

  6. SpringMVC上传文件后返回文件服务器地址路径

    先写一个表单: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...

  7. SpringMVC上传文件总结

    如果是maven项目 需要在pom.xml文件里面引入下面两个jar包 <dependency> <groupId>commons-fileupload</groupId ...

  8. SpringMVC 上传文件 MultipartFile 转为 File

    在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...

  9. [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取

    0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...

随机推荐

  1. 框架-spring入门总结

    框架-spring入门总结 参考: http://www.cnblogs.com/heavenyes/p/3908546.html http://www.cnblogs.com/heavenyes/p ...

  2. js 面试题总结

    面试题解析 window.number = 1; var obj = { number: 4, dbl: (function(){ console.log(obj.number); this.numb ...

  3. Spring的JdbcTemplate实现分页

    PageList.java实体类 /** * 封装分页对象 **/ public class PageList { private int page; //当前页 private int totalR ...

  4. js获取当前日期(年月日格式)

    function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var year = date ...

  5. MyBatis案例&增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  6. redis集群登陆

    如何登陆redis集群 redis-cli -h 10.12.4.45 -p 7000 -c -a alkdsjf134rj01 ip:10.12.4.45 集群中的一个点 -c 以集群方式登陆.cl ...

  7. POJ 1961 循环节

    和POJ 2406 几乎一样.前者是求 该字符串的最小的循环节.也就是最大的循环次数.后者是求该字符串的每个前缀的循环节的最大循环次数.(如果有的话).而且必须大于1.才可以输出.就是POJ 2406 ...

  8. 正则,String中用法,Pattern Matcher

    package com.正则表达式; import java.util.Scanner; /** * * 校验qq号码 * 1:要求必须是5-15位数字 * 2: 0不能开头 * 分析: * A:键盘 ...

  9. JSP乱码(小记)

    Post提交乱码: 设置请求的编码方式: request.setCharacterEncoding("utf-8"); 设置响应的编码方式: response.setCharact ...

  10. vue.js 源代码学习笔记 ----- keep-alives

    /* @flow */ import { callHook } from 'core/instance/lifecycle' import { getFirstComponentChild } fro ...