Spring MVC 中文件上传

5 篇文章 0 订阅
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";

	@Autowired
	private CommonAddWaterMark ssCommonAddWaterMark;

	@Autowired
	private 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();

		// 获取文件大小 KB
		Integer 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值