spring mvc 上传文件帮助类(留备用)

本文介绍了一个文件上传助手的实现细节,包括如何处理文件上传过程中的各种限制,如文件类型、大小,以及如何重命名和存储文件。同时,文章还探讨了如何在上传成功后返回文件属性,如文件名、原始文件名、大小、路径等。
package com.service.impl;

import com.entity.UploadInfo;
import com.service.UploadHelp;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.common.Prompt;

//import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Arrays;

import javax.servlet.ServletContext;
//import javax.imageio.ImageIO;

/**
 * 上传文件帮助类
 * 
 * @author mingqi_QIAN 创建日期2018-10-16
 */
public class UploadHelpImpl implements UploadHelp {

	/**
	 * 上传文件
	 * 
	 * @param file       文件
	 * @param folder     文件夹
	 * @param suffixName 限制的上传扩展名的集合
	 * @param maxSize    限制的最大上传大小
	 * @return prompt
	 */
	@Override
	public Prompt uploadFile(CommonsMultipartFile file, String folder, String[] suffixName, long maxSize) {
		System.out.println(folder);
		Prompt prompt = new Prompt();// 消息提示实体类对象
		String fileName = file.getOriginalFilename();// 获取文件名
		String fileSuffix = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();// 获取后缀
		String newFileName = String.valueOf(System.currentTimeMillis()) + fileSuffix;// 重命名文件名
		String filePath = getPath(folder).getAbsolutePath();// 获取路径
		System.out.println(filePath);
		String savePath = filePath + "\\" + newFileName;// 保存文件及文件路径
		System.out.println(savePath);
		// 检查文件夹是否在,不存在创建它
		File folders = new File(filePath);
		if (!folders.exists() && !folders.isDirectory()) {
			folders.mkdirs();//mkdir只创建单级目录 mkdirs创建多级目录
		}
		// 限制文件上传类型
		long fileSize = file.getSize();
		if (!checkFileSuffix(fileSuffix, suffixName)) {
			prompt.setCode(2);
			prompt.setMessage("请选择允许上传的文件!");
		} else {
			// 限制文件上传大小
			if (fileSize > maxSize) {
				prompt.setCode(3);
				prompt.setMessage("文件超过制限大小!");
			} else {
				try {
					// 写入路径
					file.transferTo(new File(savePath));
					prompt.setCode(1);
					prompt.setMessage("上传成功!");
					// 将文件属性以实体对象形式装
					UploadInfo uploadInfo = new UploadInfo();
					uploadInfo.setFileName(newFileName);
					uploadInfo.setOldFileName(fileName);
					uploadInfo.setFileSize(String.valueOf(fileSize));
					uploadInfo.setFilePath(getPath(folder).getRelativePath()+"/UpLoad/" + folder);
					uploadInfo.setFileSuffixName(fileSuffix);
					// 如果上传的是图片,获取图片的宽高,经测试 此处只支持png获取,jpg会出错
//					String[] images = new String[] { ".jpg", ".gif", ".png",".jpeg",".bmp" };
//					if (Arrays.asList(images).contains(fileSuffix)) {
//						BufferedImage image = ImageIO.read(file.getInputStream());
//						if (image != null) {
//							uploadInfo.setFileWidth(image.getWidth());
//							uploadInfo.setFileHeight(image.getHeight());
//						}
//					}
					// 将文件属性实体加入消息体中
					prompt.setDatas(uploadInfo);
				} catch (Exception e) {
					prompt.setCode(0);
					prompt.setMessage("上传失败");
				}

			}

		}
		return prompt;
	}

	/**
	 * 检查上传文件类型
	 * 
	 * @param filesuffix 文件后缀名
	 * @param suffixName 允许上传的后缀数组
	 * @return
	 */
	private boolean checkFileSuffix(String filesuffix, String suffixName[]) {
		String[] suffixNames = suffixName;
		if (Arrays.asList(suffixNames).contains(filesuffix)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获取保存路径
	 * 
	 * @param folder 文件夹
	 * @return
	 */
	private Pathstr getPath(String folder) {
		WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
		ServletContext servletContext = webApplicationContext.getServletContext();
		Pathstr pathstr = new Pathstr();
		// 得到文件绝对路径
		pathstr.setAbsolutePath(servletContext.getRealPath("/UpLoad/" + folder));
		// 得到文件相对路径
		pathstr.setRelativePath(servletContext.getContextPath());
		return pathstr;
	}
}

/**
 * 取得路径
 * 
 * @author mingqi_QIAN
 *
 */
class Pathstr {
	private String relativePath;// 相对路径
	private String absolutePath;// 绝对路径

	/**
	 * 相对路径
	 * 
	 * @return
	 */
	public String getRelativePath() {
		return relativePath;
	}

	/**
	 * 获得相对路径
	 * 
	 * @param relativePath
	 */
	public void setRelativePath(String relativePath) {
		this.relativePath = relativePath;
	}

	/**
	 * 绝对路径
	 * 
	 * @return
	 */
	public String getAbsolutePath() {
		return absolutePath;
	}

	/**
	 * 获得绝对路径
	 * 
	 * @param absolutePath
	 */
	public void setAbsolutePath(String absolutePath) {
		this.absolutePath = absolutePath;
	}
}

 

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 1. 组件扫描(根据实际包名修改) --> <context:component-scan base-package="cn.edu.uibe.controller"/> <!-- 2. 注解驱动(必须启用) --> <mvc:annotation-driven/> <!-- 3. 静态资源处理(关键修改) --> <mvc:resources mapping="/statics/**" location="/statics/" cache-period="31536000"/> <mvc:resources mapping="/images/**" location="/images/" cache-period="31536000"/> <!-- 4. 兜底静态资源处理(必须添加) --> <mvc:default-servlet-handler/> <!-- 5. 视图解析器(优化配置) --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> <!-- 开发阶段建议禁用缓存 --> <property name="cache" value="false"/> </bean> <!-- 6. 文件上传(优化配置) --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/> <!-- 10MB --> <property name="defaultEncoding" value="UTF-8"/> <property name="resolveLazily" value="true"/> </bean> <!-- 7. 拦截器配置(示例,可选) --> <mvc:interceptors> <bean class="cn.edu.uibe.interceptor.AccessInterceptor"/> </mvc:interceptors> <!-- 8. 消息转换器(可选) --> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="defaultCharset" value="UTF-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </mvc:message-converters> </beans>/这是spring-mvc.xml文件,给出完整的修改后的文件
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值