springMvc上传文件、读取zip/rar文件
参考文章:
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文件的更多相关文章
- SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html
SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...
- SpringMVC上传文件(图片)并保存到本地
SpringMVC上传文件(图片)并保存到本地 小记一波~ 基本的MVC配置就不展示了,这里给出核心代码 在spring-mvc的配置文件中写入如下配置 <bean id="multi ...
- springmvc上传文件,抄别人的
SpringMVC中的文件上传 分类: SpringMVC 2012-05-17 12:55 26426人阅读 评论(13) 收藏 举报 stringuserinputclassencoding 这是 ...
- 2. SpringMVC 上传文件操作
1.创建java web项目:SpringMVCUploadDownFile 2.在项目的WebRoot下的WEB-INF的lib包下添加如下jar文件 com.springsource.com.mc ...
- 使用springMVC上传文件
control层实现功能: @RequestMapping(value="upload2") public String upLoad2(HttpServletRequest re ...
- SpringMVC上传文件后返回文件服务器地址路径
先写一个表单: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE ...
- SpringMVC上传文件总结
如果是maven项目 需要在pom.xml文件里面引入下面两个jar包 <dependency> <groupId>commons-fileupload</groupId ...
- SpringMVC 上传文件 MultipartFile 转为 File
在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...
- [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取
0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...
随机推荐
- Jenkins报错Error cloning remote repo 'origin'
Jenkins控制台输出报错 输出ERROR: Error cloning remote repo 'origin' 这行报错只能说明是git有问题,其他没什么有用的信息. 浏览器中Ctrl+F查找E ...
- python 进制转换
print hex(),hex(-) #转换成十六进制 print oct(),oct(-) #转换成八进制 print bin(),bin(-) #转换成二进制 print int("字面 ...
- python 读空的json文件
读空的json文件,python2和python3 的错误提示是不一样的 python2: ValueError: No JSON object could be decoded python3: j ...
- Android多个Module统一配置相同jar或库的版本号
Android Studio多个Module依赖相同的库时对版本号进行统一配置 在Android项目中,一个项目经常会依赖其他的一个甚至多个库文件,在这种依赖的时候最常见的一个错误就是 jar包版本不 ...
- 递归--练习1--noi3089爬楼梯
递归--练习1--noi3089爬楼梯 一.心得 根据输入,是要写连续输入多个值的程序 二.题目 3089:爬楼梯 总时间限制: 1000ms 内存限制: 65536kB 描述 树老师爬楼梯,他可 ...
- MVP框架模式
一.基本概念 MVP是Model-View-Presenter的简称,即模型-视图-表现层的缩写.MVP是由MVC模式进化而来的,MVP改进了MVC中的控制器过于臃肿的问题.与MVC一样,MVP将应用 ...
- 001——数组(一)数组知识及foreach函数应用
<?php /**数组(一)数组知识及foreach函数应用*/ /*数组:在一个变量中,存储一个或多个值,每一个元素都有一个访问ID * * */ /* * //索引型数组 $arr=arra ...
- bzoj1449&&bzoj2895
题解: S连每场比赛流量1费用0 每场比赛连参赛队流量1费用0 我们发现调整一次 由win,lose变为 win+1,lose-1的费用为 (C*(win+1)^2+D*(lose-1)^2) - ( ...
- [批处理]批量提取MKV资源
最初是下了部没字幕的动漫,是720P MKV格式的,当时没注意,下完了以后才发现是没字幕的 后来去射手上找没有,百度了半天也没有 最后只能求救与已经下了这部动漫是MKV格式且是内挂字幕的人来帮忙 最后 ...
- 《转》深入理解Activity启动流程(四)–Activity Task的调度算法
本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...