springmvc 通用文件上传

1.工具类FileUtil.java

package com.h3c.portal.business.seconddev.util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;

public class FileUtil {

    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception{
        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        FileOutputStream out = new FileOutputStream(filePath+fileName);
        out.write(file);
        out.flush();
        out.close();
    }

    public static void downloadFiles(List<String> filenames, HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            String path = "";
            String filename = "";
            //系统是Linux还是Windows
            String os1 = System.getProperty("os.name");
            if (os1.toLowerCase().startsWith("win")) {
                //文件名处理乱码
                filename = new String(filenames.get(0).getBytes("ISO-8859-1"), "UTF-8");
                //需要下载的文件
                path = "/D://uploadFile/" + filename;
            } else {
                //需要下载的文件
                path = "/uploadFile/" + filenames.get(0);
            }
            System.out.println("文件下载路径-------" + path);

            //得到文件输入流
            FileInputStream inputStream = new FileInputStream(new File(path));

            //设置头部响应的格式:文件输出时的名字
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filenames.get(1).getBytes("gb2312"), "ISO8859-1"));

            OutputStream os = response.getOutputStream();

            response.setContentType("application/octet-stream");

            //定义大小 边读边写
            int length = 0;

            byte[] bt = new byte[1024];

            while ((length = inputStream.read(bt)) > 0) {
                os.write(bt, 0, length);
                //重新定义长度
                bt = new byte[1024];
            }
            //关闭流
            os.flush();
            os.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2.UUID生成工具类

package com.h3c.portal.business.seconddev.util;

import java.util.UUID;

public class UUIDUtil {
    /**
     * 带-的UUID
     *
     * @return 36位的字符串
     */
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }

    /**
     * 去掉-的UUID
     *
     * @return 32位的字符串
     */
    public static String getUUID2() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

3.web层调用或者写入到serviceimpl

   @RequestMapping("uploadFile")
    public BaseResult uploadFile(@RequestParam("file") final MultipartFile file, final HttpServletRequest request) {
        final BaseResult baseResult = new BaseResult(BaseResultEnum.SUCCESS);
        // final String type = request.getParameter("type");
        // String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() +
        // "uploadFile/";
        String path = "";
        final String os = System.getProperty("os.name");
        if (os.toLowerCase().startsWith("win")) {
            path = "/D://uploadFile/";
        } else {
            path = "/uploadFile/";
        }
        final String fileName = file.getOriginalFilename();
        final String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        final String newFileName = UUIDUtil.getUUID2() + "." + suffix;
        try {
            FileUtil.uploadFile(file.getBytes(), path, newFileName);
        } catch (final Exception e) {
            baseResult.change(BaseResultEnum.FAILD, e.getMessage());
        }
        String requestURL = request.getRequestURL().toString();
        requestURL = requestURL.replace("/workOriginator", "");
        path = requestURL + "/";
        final Map<String, Object> map = new HashMap<>();
        map.put("fileName", fileName);
        map.put("newFileName", newFileName);
        map.put("filePath", path);
        baseResult.setData(map);
        return baseResult;
    }

 

posted @ 2020-07-14 09:08  敲代码的机车Boy  阅读(200)  评论(0编辑  收藏  举报