Spring-mvc文件上传和下载工具类,拿过去直接用就行了(重修版)

话不多说,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;
    }
}

 

 


 

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值