文件上传工具类

来源:互联网 发布:大富豪2手游源码 编辑:程序博客网 时间:2024/04/29 16:39
package com.eastcom.cartutor.admin.web.common.utils;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;@Componentpublic class fileUploadUtils {    private static String uploadPath;    @Value("${global.upload}")    public void setUploadPath(String uploadPath) {        fileUploadUtils.uploadPath = uploadPath;    }    /**     * 创建目录     * @return String     */    public static String mkUploadPath(String dirPath){        String path = uploadPath + "/" + dirPath;        File file =new File(path);        if  (!file.exists()  && !file .isDirectory()) {            //目录不存在,创建            file.mkdirs();        }        return path;    }    /**     * 生成上传文件的文件名     * @param fileName     * @return String  文件名以:yyyyMMddHHmmss+"_"+文件的原始名称     */      public static String mkFileName(String fileName){         SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");         return sf.format(new Date())+"_"+fileName;     }    /**     * 获取文件     * @param url     * @param request     * @param response     * @throws IOException     */    @SuppressWarnings("resource")    public static void getFile(String url,HttpServletRequest request,HttpServletResponse response) throws IOException {        File file = new File(url);        if (file.isFile() && file.exists()){            long len = file.length();            response.setContentLength((int) len);            byte[] bytes = new byte[(int)len];            BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));            int r = bufferedInputStream.read( bytes );            if (r != len) {                throw new IOException("读取文件不正确");            }            bufferedInputStream.close();            OutputStream os = response.getOutputStream();            os.write(bytes);            os.flush();            os.close();        }    }    /**     * 保存文件     * @param request     * @return  List<Map>     * @throws IllegalStateException     * @throws IOException     */    public static List<Map<String, Object>> uploadFile(String dirPath,HttpServletRequest request) throws IllegalStateException, IOException{        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());         List<Map<String, Object>> result = new ArrayList<>();        if(multipartResolver.isMultipart(request)) {            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;            Iterator<String> iter = multiRequest.getFileNames();            while(iter.hasNext()){                MultipartFile file = multiRequest.getFile(iter.next());                if(file!=null && file.getSize()>0) {                    //文件名                    String fileName = mkFileName(file.getOriginalFilename());                    //文件存储路径                    String path = mkUploadPath(dirPath) + "/"+ fileName;                    //储存文件                    file.transferTo(new File(path));                    Map<String, Object> fileInfo = new HashMap<>();                    fileInfo.put("url", path);                    result.add(fileInfo);                }            }        }        return result;    }}