参考文章:

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. notepad++下载32位,安装插件管理

    下载32位地址: https://notepad-plus-plus.org/download/v7.6.4.html 下载插件: 链接: https://pan.baidu.com/s/1tRSo4 ...

  2. 2018-2019 Russia Open High School Programming Contest (Unrated, Online Mirror, ICPC Rules, Teams Preferred)

    前言 有一场下午的cf,很滋磁啊,然后又和dalao(见右面链接)组队打了,dalao直接带飞我啊. 这是一篇题解,也是一篇总结,当然,让我把所有的题目都写个题解是不可能的了. 按照开题顺序讲吧. 在 ...

  3. IDEA使用Git管理项目

    今天将项目使用Git管理了,IDEA. 第一步: 第二步:

  4. POJ 2115 C Looooops(模线性方程)

    http://poj.org/problem?id=2115 题意: 给你一个变量,变量初始值a,终止值b,每循环一遍加c,问一共循环几遍终止,结果mod2^k.如果无法终止则输出FOREVER. 思 ...

  5. vue2.0中v-on绑定自定义事件

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...

  6. RHEL6.5恢复root密码

    1.开机上下键停留在如下界面,键盘输入小写e: 2.选择如下选项,并输入小写e: 3.输入1,回车进入单用户模式: 4.键盘输入小写b,进行启动: 5.进入到单用户模式: 6.修改root用户密码,并 ...

  7. [javascript]javascript取得html元素,取得html样式,修改html样式

    一.取得html元素 详情见:https://www.jb51.net/article/116460.htm 1.通过ID获取(getElementById) document.getElementB ...

  8. 将数据提取到CSV文件中保存

    这个方法可以实现,登录获取的token放入CSV文件,供后续调用,这里没有用登录举例 FileWriter fstream = new FileWriter("E:\\apache-jmet ...

  9. gruntjs开发实例

    Grunt是基于Node.js的项目构建工具.它可以自动运行你所设定的任务,如编译less,sass,压缩js,合拼文件等等. (一)安装nodejs环境,Grunt 0.4.x要求Node.js的版 ...

  10. offsetParent.scrollTop IE下一直报错,说“缺少对象”

    <div style="position:fiexd; top:135px;_position: absolute; right: 0pt; _top:expression_r(off ...