话不多说,Spring文件上传工具类,拿把下面两个类的代码复制过去直接用就行了,不用谢,我叫雷锋。
1.文件上传工具类代码
package music.spring.utils;
import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
/**
* @author 江西DJ烟仔
* @time 2018年6月18日 :上午1:07:04
* @description 文件上传 工具类
*/
public class UploadKit {
/**
* 单文件上传
* @param request 请求对象
* @param folderPath 文件存放文件夹
* @param useNewName 是使用原文件名称还是使用随机生成的文件名称
* @return
*/
public static UploadFileEntity getFile(HttpServletRequest request, String filePath, boolean useNewName){
// 创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
try {
// 判断 request 是否有文件上传,即多部分请求
if (multipartResolver.isMultipart(request)) {
// 转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
UploadFileEntity f = transferFile(iter.next(),filePath,multiRequest,useNewName);
if(f!=null){return f;}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 封装文件信息
* @param path
* @param folderPath
* @param multiRequest
* @return
* @throws IOException
*/
private static UploadFileEntity transferFile(String path,String filePath,MultipartHttpServletRequest multiRequest, boolean useNewName) throws IOException {
// 取得上传文件
String diskFileName = null;
MultipartFile file = multiRequest.getFile(path);
if (StringUtil.isEmpty(file)) { return null; }
String fileMD5 = fileMd5(file.getBytes());
String originalName = file.getOriginalFilename();//原名称 带后缀
String fileSuffix = originalName.substring(originalName.lastIndexOf("."));//后缀名
String newName = System.currentTimeMillis() + fileSuffix;//新名称
if(!useNewName){ //文件存放在磁盘上的最终名称、若文件使用原名称、使用时间缀解决文件重名问题
diskFileName = "["+System.currentTimeMillis() +"] - "+originalName;
}else{
diskFileName = newName;
}
Long fileSize = file.getSize();//文件大小
File directory = new File(FilePathKit.FILE_ROOT_PATH,filePath);
if (!directory.exists()) {directory.mkdirs();}
file.transferTo(new File(directory,diskFileName));
UploadFileEntity upload = new UploadFileEntity();
upload.setFileSize(fileSize.doubleValue());
upload.setNewName(newName);
upload.setOrigName(originalName);
upload.setFileMd5(fileMD5);
upload.setUploadTime(new Date());
upload.setServerPath(filePath.concat(diskFileName));
return upload;
}
/**返回上传文件的MD5 by:long*/
public static String getFileMd5(HttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
try {
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
MultipartFile file = multiRequest.getFile(iter.next());
if(null != file){
return fileMd5(file.getBytes());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 计算MD5值 by:long
* @param bytes
* @return
*/
public static String fileMd5(byte[] bytes) {
String value = null;
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(bytes);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return value;
}
/**
* 删除文件
* @param path 文件相对路径
* @return
*/
public static boolean deleteFile(String path){
File file = new File(FilePathKit.FILE_ROOT_PATH,path);
if(file.exists()){ return file.delete(); }
return true;
}
}
2.封装上传后文件实体类代码
package music.spring.utils;
import java.util.Date;
/**
* @author 江西DJ烟仔
* @time 2018年6月18日 :上午12:57:05
* @description 文件上传包装类
*/
public class UploadFileEntity {
/**文件ID*/
private Integer id;
/**文件原名称*/
private String origName;
/**文件新名称*/
private String newName;
/**文件上传后服务器访问地址*/
private String serverPath;
/**文件大小*/
private Double fileSize;
/**文件MD5*/
private String fileMd5;
/**文件上传时间*/
private Date uploadTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrigName() {
return origName;
}
public void setOrigName(String origName) {
this.origName = origName;
}
public String getNewName() {
return newName;
}
public void setNewName(String newName) {
this.newName = newName;
}
public String getServerPath() {
return serverPath;
}
public void setServerPath(String serverPath) {
this.serverPath = serverPath;
}
public Double getFileSize() {
return fileSize;
}
public void setFileSize(Double fileSize) {
this.fileSize = fileSize;
}
public String getFileMd5() {
return fileMd5;
}
public void setFileMd5(String fileMd5) {
this.fileMd5 = fileMd5;
}
public Date getUploadTime() {
return uploadTime;
}
public void setUploadTime(Date uploadTime) {
this.uploadTime = uploadTime;
}
}
3.文件下载工具类代码
package music.spring.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
/**
* @author 江西DJ烟仔
* @createtime 2018/4/7 11:13.
* @describe 文件下载工具类
*/
public class DownloadKit {
/**
* 文件下载
* @param fileName 下载后的文件名
* @param sourcePath 文件相对路径
* @throws Exception
*/
public static boolean download(HttpServletResponse response, String sourcePath, String fileName) throws Exception { //把FilePathKit.FILE_ROOT_PATH 换成你的项目根路径
File sourceFile = new File(FilePathKit.FILE_ROOT_PATH + sourcePath);
if (!sourceFile.exists()) { throw new Exception("您下载的资源已不存在"); }
BufferedInputStream in = null;
ServletOutputStream out = null;
try {
fileName = URLEncoder.encode(fileName, "UTF-8"); //解决下载文件名乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
in = new BufferedInputStream(new FileInputStream(sourceFile));
out = response.getOutputStream();
byte[] buffer = new byte[1024 * 1024 * 10];
int len = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
} catch (Exception e) {
e.printStackTrace();
throw new Exception(fileName + " 下载出错,若有问题请与管理员联系");
} finally {
out.close();
in.close();
}
return true;
}
}