Spring MVC 中文件上传

来源:互联网 发布:运动数据记录器 编辑:程序博客网 时间:2024/05/29 12:48
package com.ss.cms.action;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Locale;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import org.apache.commons.io.FilenameUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.multipart.MultipartFile;import com.ss.common.upload.UploadUtils;import com.ss.db..entity.Material;/** * 实现文件上传 *  * @author ss */public class CommonUpload {/** * 图片的所有后缀名 * @author ss */public final String[] Image_Suffix = { "BMP", "JPEG", "JPG", "PNG" };/** * 前台画面上传路径 */public final String FRONTFILEPATH = "/upload/front";/** * 后台画面上传路径 */public final String SYSFILEPATH = "/upload/sys";@Autowiredprivate CommonAddWaterMark ssCommonAddWaterMark;@Autowiredprivate CommonCreateThumbnail ssCommonCreateThumbnail;/** * 处理单文件上传方式 调用JeeCsm系统和Spring的文件写出方式 *  * @param file * @param ext * @param request * @return */public HashMap<String, String> wenJianShangChuan(MultipartFile file, HttpServletRequest request, String filepath) {HashMap<String, String> rfile = new HashMap<>();if (file.isEmpty()) {return null;}// 获取文件名String origName = file.getOriginalFilename();// 获取文件大小 KBInteger fileSize = (int) file.getSize() / 1024;// 获取扩展名String ext = FilenameUtils.getExtension(origName).toLowerCase(Locale.ENGLISH);// 构建真实路径String filePath1 = request.getSession().getServletContext().getRealPath(filepath);// 动态路径:YYYYMM/DDHHMMSS****String filePath2 = UploadUtils.generateFilename(filePath1, ext);File dest = new File(filePath2);try {UploadUtils.checkDirAndCreate(dest.getParentFile());file.transferTo(dest);if(isImage(dest,ext)) {//添加水印String waterMarkPath = request.getSession().getServletContext().getRealPath("")+ "/r/cms/www/watermark.png";ssCommonAddWaterMark.addWaterMark(filePath2, filePath2, waterMarkPath, 0.8f);//生成缩略图String pathIn = filePath2.replace("/", "\\");String pathOut = pathIn.substring(0, pathIn.lastIndexOf("\\") + 1) + "Thumb_" + pathIn.substring(pathIn.lastIndexOf("\\") + 1);ssCommonCreateThumbnail.createThumbnail(pathIn, pathOut, 240, 180);}rfile.put("fileRealPath", "/" + filePath2.replace(filePath1, filepath.substring(1)));rfile.put("fileName", origName);rfile.put("fileExt", ext);rfile.put("fileSize", fileSize.toString());} catch (IOException e) {System.err.println("CommonUpload:wenJianShangChuan出错啦!" + e.getMessage());}return rfile;}/** * 处理多文件上传方式 注意:form 中file类型名称一致 即 * <code><input type="file" name="files" id="file1"> * <input type="file" name="files" id="file2"> * </code> * @param files * @param request * @param filepath * @return */public ArrayList<HashMap<String, String>> duoWenJianShangChuan(MultipartFile[] files, HttpServletRequest request, String filepath) {if((files == null) || (files.length < 1) ){return null;}ArrayList<HashMap<String, String>> rfiles = new ArrayList<>();HashMap<String, String> rfile;for (MultipartFile file : files) {rfile = new HashMap<>();rfile = wenJianShangChuan(file, request, filepath);if (rfile != null) {rfiles.add(rfile);}}return rfiles;}/** * 判断是否为允许上传的文件类型 * @param inFile:要判断的文件 * @param ext:后缀名 * @return */public boolean isImage(File inFile, String ext){if((inFile == null) || (ext == null) || ext.equals("")){return false;}try {if(ImageIO.read(inFile) != null){for(String e : Image_Suffix) {if(ext.equalsIgnoreCase(e)) {return true;}}}} catch (IOException e) {e.printStackTrace();}return false;}}

0 0
原创粉丝点击