参考文章:

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. 2015-9-13 NOIP模拟赛 by hzwer

    好老的题了,但是还是很有做头的. 总结 不吸氧看来确实是没法用stl的啊(set常数太大了,开O2也没过) SPFA没认真学,觉得有堆优化Dijkstra就天下无敌了,今天负边权教我做人 于是苦逼的只 ...

  2. springboot logback + log4j2日志管理

    springboot的web项目中自带了日志组件: 我们看一下,springboot中找到日志组件. <dependency> <groupId>org.springframe ...

  3. 用PHP开发命令行工具

    介绍 用过laravel开发过项目的都应该用过artisan,通过artisan我们可以在命令行中创建控制器类,Eloquent类等,今天我们将通过php来开发命令行工具 开发环境与工具 使用vagr ...

  4. 前端jsp页面script引入url项目名使用${appName}

    <script src="/${appName}/commons/jslib/CommonValue.js"></script> 新建一个com.autum ...

  5. DCOS(centos 7.4/7.6)

    https://dcos.io/releases/ https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh https ...

  6. UVALive-2966 King's Quest(强连通+二分图匹配)

    题目大意:有n个男孩和和n个女孩,已只每个男孩喜欢的女孩.一个男孩只能娶一个女孩.一个女孩只能嫁一个男孩并且男孩只娶自己喜欢的女孩,现在已知一种他们的结婚方案,现在要求找出每个男孩可以娶的女孩(娶完之 ...

  7. 牛客网——G大水题

    链接:https://www.nowcoder.net/acm/contest/75/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  8. 005——php字符串中的处理函数(四)

    <?php /** * 字符串处理函数: * parse_url 解析URL.返回其组成部分 */ /* $url="http://www.lantianwang.com/admin/ ...

  9. 『转』Emsisoft Anti-Malware 8刷Key教程 - 文字版

    先分主机和客机,下载好 EAM8安装包 和 30天重置工具EAM Trial Reset 1.1.exe 1. 主机安装 Emsisoft Anti-Malware 8 并激活30天试用版   如果已 ...

  10. jinja 2 filter 使用

    文档地址 http://jinja.pocoo.org/docs/templates/#builtin-filters indent indent(s, width=4, indentfirst=Fa ...