package com.zdcf.tool;
import java.io.File;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONObject;
/**
*
* @description:文件上传通用处理工具类
* @author 懂得
* @version 创建时间:2016年8月19日 上午11:19:57
*/
public class UploadFileUtils {
/**
* 上传文件存放服务器
* @param request
* @param dir
* @return
*/
public static String getServerSaveDir(HttpServletRequest request, String dir){
StringBuffer uploadPath = new StringBuffer(request.getSession().getServletContext().getRealPath("uploadimage"));
uploadPath.append(File.separator);
uploadPath.append(dir);
uploadPath.append(File.separator);
uploadPath.append(DateUtil.dateToStr(new Date(), "yyyyMMdd"));
File file = new File(uploadPath.toString());
if ( !file.exists() ) {
file.mkdirs();
}
return file.getPath();
}
/**
* 文件重命名
* @param file
* @return
*/
public static String rename( MultipartFile file ) {
//获取原始文件名
String fileName = file.getOriginalFilename();
//新文件名称,不设置时默认为原文件名
String newFileName = new Date().getTime()+(new Random().nextInt(9999-1000+1)+1000)+fileName.substring(fileName.lastIndexOf('.'));
return newFileName;
}
/**
* 文件保存路径
* @param request
* @param serverSaveDir
* @param newFileName
* @return
*/
public static String getSavaDir(HttpServletRequest request,String serverSaveDir, String newFileName){
StringBuffer savaPath = new StringBuffer();
//文件存放路径
savaPath.append(serverSaveDir);
savaPath.append(File.separator);
//文件名称
savaPath.append(newFileName);
//将绝对路径"\"替换成"/"
String savaFilePath = savaPath.toString().replaceAll("\\\\", "/");
//查询"/tizi"最后一个字母的位置
int index =savaFilePath.lastIndexOf(request.getSession().getServletContext().getContextPath())+request.getSession().getServletContext().getContextPath().length();
//文件保存路径
String filePath = savaFilePath.substring(index+1,savaFilePath.length());
return filePath;
}
/**
*
* @param request 网页请求
* @param avatar_file avatar_file(源文件)
* @param avatar_data avatar_data(裁剪参数JSON
* @param dir 地址名称
* @return
*/
public static Map<String, Object> Upload(HttpServletRequest request, MultipartFile avatar_file, String avatar_data, String dir){
Map<String, Object> returnMap = new HashMap<String, Object>();
//获取服务器的实际路径
String serverSaveDir = getServerSaveDir(request, dir);
//生成文件名称
String newFileName = rename(avatar_file);
//先把用户上传到原图保存到服务器上
File targetFile = new File(serverSaveDir, newFileName);
boolean flag = false;
try{
//创建JSONObject对象
JSONObject joData = (JSONObject) JSONObject.parse(avatar_data);
// 用户经过剪辑后的图片的大小
float x = joData.getFloatValue("x");
float y = joData.getFloatValue("y");
float w = joData.getFloatValue("width");
float h = joData.getFloatValue("height");
float r = joData.getFloatValue("rotate");
//将文件剪辑并上传到服务器上和本地文件中
if(!targetFile.exists()){
targetFile.mkdirs();
//获取文件流,可以进行处理
InputStream is = avatar_file.getInputStream();
//旋转后剪裁图片
ImageUtils.cutAndRotateImage(is, targetFile, (int)x,(int)y,(int)w,(int)h,(int)r);
//关闭该流并释放与该流关联的所有系统资源。
is.close();
flag = true;
}
}catch(Exception e){
e.printStackTrace();
}
String a = serverSaveDir.replaceAll("\\\\", "/");
String[] options = a.split( "uploadimage/");
returnMap.put("savaPath", options[1]+"/"+ newFileName);
returnMap.put("flag", flag);
return returnMap;
}
}