/**
*
*/
package com.up.controller;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.up.constant.SystemConstants;
import com.up.util.FileCopy;
import com.up.util.ImageUtils;
import com.up.util.OperateImage;
import com.up.util.UploadUtil;

/**
* @author hu.shiguo
* @time 2014-3-14下午2:53:15
* @description
* @version
*/
@Controller
@RequestMapping(value="upload")
public class UploadFileController {

/**
* 图片上传
* @param request
* @param response
* @param myFile
*/
@RequestMapping(value = "uploadFile")
public void upload(HttpServletRequest request, HttpServletResponse response,
@RequestParam MultipartFile myFile)
{
//要删除文件的所在子文件夹
String fileFolderpath = request.getParameter("fileFolderpath");
//工程文件夹
String projectPath = SystemConstants.WEB_ROOT;
File files = new File(projectPath);
//上传文件保存文件夹
String uploadFilePath = files.getParent()+File.separator;
//String uploadFilePath =files.getPath()+File.separator + "uploadFile";
//上传实际路径
String basePath = uploadFilePath+"uploadFile"+File.separator+"up"+File.separator +fileFolderpath;
//未压缩的图片上传至暂时文件夹
String tempPath = uploadFilePath+"uploadFile"+File.separator+"up"+File.separator +SystemConstants.URL_TEMP;
InputStream is = null ;
FileOutputStream os = null;
if (!new File(basePath).isDirectory())
{
new File(basePath).mkdirs();
}
try
{
//获取上传文件旧名
String name = myFile.getOriginalFilename();
//获取后缀名
String last = name.substring(name.lastIndexOf(".")+1);
//上传路径--压缩前
String org = "";
File file = new File(tempPath, System.currentTimeMillis() + new Random(50000).nextInt() + "."+last);
is = myFile.getInputStream();
os = new FileOutputStream(file);
//上传
UploadUtil.copyFile(is, os);
//获取未压缩图片上传后的绝对路径===在暂时文件夹文件夹中
org = file.getAbsolutePath();
System.out.println("org=="+org);
//压缩后图片存储路径
String dest = System.currentTimeMillis() + new Random(50000).nextInt() + "."+last;
System.out.println("dest=="+dest);
//System.out.println("file.getName():"+file.getName());
//方法一:进行压缩
boolean bol1 = ImageUtils.resize(org, basePath+File.separator+dest, 200, 200);
//方法二:进行剪切
//返回压缩后的图片名称到前端展示
//先缩放,再裁剪
boolean bol2 = false;
if(bol1){
OperateImage o = new OperateImage(basePath+File.separator+dest, 0, 0, 200, 200);
o.setSubpath(basePath+File.separator+dest);
o.setImageType(last);
bol2 = o.cut();
}
if(bol1||bol2){
System.out.println("---------"+dest);
response.getWriter().write(dest);
}else{
FileCopy fc = new FileCopy();
//由于没有压缩。所以将未压缩的文件从暂时文件里复制至目标路径下
fc.doMoveFile(file.getName(), tempPath, basePath);
response.getWriter().write(file.getName());
}
}
catch (Exception e)
{
e.printStackTrace();
}finally{
try{
if (os != null) {
os.close();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
os = null;
is = null;
}
}
}

/**
* 删除上传图片
* @param request
* @param response
* @param myFile
*/
@RequestMapping(value = "deleteFile.html")
public void deleteFile(HttpServletRequest request,
HttpServletResponse response)
{
String fileFolderpath = request.getParameter("fileFolderpath")+"/";
String fileName = request.getParameter("fileName");
//工程文件夹
String webPath = SystemConstants.WEB_ROOT;
File files = new File(webPath);
//上传文件的文件夹
String uploadFilePath = files.getParent()+File.separator;
//String uploadFilePath =files.getPath()+File.separator + "uploadFile";
String basePath = uploadFilePath+SystemConstants.URL_UPLOADFILE+fileFolderpath+fileName;

File file = new File(basePath);
if (file.isFile() || file.isDirectory())
{
file.delete();
}
String str = "true";
response.setContentType("text/xml;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
r

SpringMVC上传图片并压缩及剪切demo的更多相关文章

  1. 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收

    利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介   WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  2. 分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片

    2016-08-05更新: 下方的代码是比较OLD的了,是通过js进行图片的剪切 旋转 再生成,效率较低. 后来又整合了一个利用native.js本地接口的压缩代码 ,链接在这 .页面中有详细的说明, ...

  3. 160920、springmvc上传图片不生成临时文件

    springMVC上传图片时候小于10k不会再临时目录里面生成临时文件,需要增加一个配置 <property name="maxInMemorySize" value=&qu ...

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

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

  5. SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片

    SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片   在上一篇文章中,我们介绍了< SpringMVC上传图片的常规上传方法 >.本文接着第一 ...

  6. SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest

    原文地址:https://blog.csdn.net/chenchunlin526/article/details/70945877 SpringMVC上传图片总结(1)---常规方法进行图片上传,使 ...

  7. springmvc上传图片到Tomcat虚拟目录

    一.简介 通过把文件上传到tomcat的虚拟目录,实现代码和资源文件分开. 二.环境 spring+springmvc+mybatis 三.代码实现 1.导入文件上传的jar <dependen ...

  8. springmvc上传图片并显示图片--支持多图片上传

    实现上传图片功能在Springmvc中很好实现.现在我将会展现完整例子. 开始需要在pom.xml加入几个jar,分别是: <dependency> <groupId>comm ...

  9. php图片水印添加,压缩,剪切的封装类

    php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有 ...

随机推荐

  1. javascript中toString和valueOf方法的区别

    toString():将对象转为字符串 valueOf():获取对象的原始值, 1.针对基本类型的变量:如在string,number,boolean类型的变量上调用这两个方法时,直接返回原始值,即变 ...

  2. php正则表达式,在抓取内容进行匹配的时候表现不稳定

    最近做了一个 抓取内容的程序,使用php的正则表达式对抓取的内容进行匹配,当进行大量匹配运算的时候,发现偶尔会出现匹配失败的情况.检查不出任何原因. 匹配失败导致匹配结果为空,最终导致写入数据库失败. ...

  3. Easy UI下拉列表默认选中(多行)与为文本框赋值

    1.为单行文本框赋值 var data2 = $('#LoadArea').combobox("getData"); if (data2) { $('#id).combobox(' ...

  4. Promise同时进入catch和then——踩坑

    记录今天使用Promise遇到的一个坑--在resolve()返回运行then之后,函数又进入到了catch,源代码大意如下: var pro = function() { return new Pr ...

  5. Linux ext2文件系统之初步思考

    数据存放在磁盘中,磁盘最小存取单位sector(512Byte);文件系统中存储的最小单位是 块(Block),大小通常(1KB,2KB,4KB...), 一个block对应多个sector,因而可用 ...

  6. asp.net web api 版本控制

    版本控制   版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionController ...

  7. FPGA DDR3调试

    FPGA DDR3调试 Spartan6 FPGA芯片中集成了MCB硬核,它可以支持到DDR3.在Xilinx的开发工具Xilinx ISE中提供了MIG IP核,设计者可以用它来直接生成 DDR3 ...

  8. C#中RichEdit控件,保存文本和图片到mysql数据库

    分别通过内存流和RTF文件保存 方法1: //建立内存流 MemoryStream ms = new MemoryStream(); //ms.Position = 0; //把当前的richtext ...

  9. 基于 HTML5 WebGL 的 3D “弹力”布局

    分子力(molecular force),又称分子间作用力.范得瓦耳斯力,是指分子间的相互作用.当二分子相距较远时,主要表现为吸引力,这种力主要来源于一个分子被另一个分子随时间迅速变化的电偶极矩所极化 ...

  10. Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程

    spring-aop-4.3.7.RELEASE  在<Spring AOP高级——源码实现(1)动态代理技术>中介绍了两种动态代理技术,当然在Spring AOP中代理对象的生成也是运用 ...