• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Springboot MultipartFile文件上传和下载

武飞扬头像
掐指一算乀缺钱
帮助1

yml文件配置是否可以上传及上传附件大小

  1.  
    servlet:
  2.  
    multipart:
  3.  
    # 允许文件上传
  4.  
    enabled: true
  5.  
    # 单个文件大小
  6.  
    max-file-size: 20MB
  7.  
    # 设置总上传的文件大小
  8.  
    max-request-size: 50MB
  1.  
    /**
  2.  
    * @param files
  3.  
    * @param request
  4.  
    * @Description 上传文件
  5.  
    * @Throws
  6.  
    * @Return java.util.List
  7.  
    * @Date 2023-08-02 12:11:02
  8.  
    * @Author WangKun
  9.  
    */
  10.  
    @PostMapping("/upload")
  11.  
    public List<JSONObject> upload(@RequestParam("uploadFiles") MultipartFile[] files, HttpServletRequest request) {
  12.  
    List<JSONObject> list = new ArrayList<>();
  13.  
    for (MultipartFile file : files) { //循环保存文件
  14.  
    JSONObject result = new JSONObject();
  15.  
    String msg = "";
  16.  
    //判断上传文件格式
  17.  
    String fileType = file.getContentType();
  18.  
    // 要上传的目标文件存放的绝对路径
  19.  
    String path = ClassUtils.getDefaultClassLoader().getResource("").getPath() "imags";
  20.  
    //文件名
  21.  
    String fileOldName = file.getOriginalFilename();
  22.  
    if (StringUtils.isNotBlank(fileOldName) && StringUtils.isNotEmpty(fileOldName)
  23.  
    && StringUtils.isNotBlank(fileType) && StringUtils.isNotEmpty(fileType)
  24.  
    ) {
  25.  
    //获取文件后缀名
  26.  
    String suffixName = fileOldName.substring(fileOldName.lastIndexOf("."));
  27.  
    //重新生成文件名
  28.  
    String fileNewName = UUID.randomUUID() suffixName;
  29.  
    // 上传
  30.  
    if (FileUtils.upload(file, path, fileNewName)) {
  31.  
    // 保存数据库信息
  32.  
    String id = addAnnex(fileNewName, fileOldName, path, fileType, file.getSize());
  33.  
    if (StringUtils.isNotBlank(id) && StringUtils.isNotEmpty(id)) {
  34.  
    result.put("fileName", fileNewName);
  35.  
    result.put("id", id);
  36.  
    msg = "文件上传成功";
  37.  
    }
  38.  
    } else {
  39.  
    msg = "文件上传失败";
  40.  
    }
  41.  
    }else{
  42.  
    msg = "文件名或文件类型为空";
  43.  
    }
  44.  
    result.put("msg", msg);
  45.  
    list.add(result);
  46.  
    }
  47.  
    return list;
  48.  
    }
学新通

文件上传到了:\target\classes\imags中

学新通

 下载:

  1.  
    /**
  2.  
    * @param id
  3.  
    * @param response
  4.  
    * @Description 文件下载
  5.  
    * @Throws
  6.  
    * @Return java.util.List<com.alibaba.fastjson2.JSONObject>
  7.  
    * @Date 2023-08-02 13:24:41
  8.  
    * @Author WangKun
  9.  
    */
  10.  
    @GetMapping("/download")
  11.  
    public void download(@RequestParam("id") String id, HttpServletRequest request, HttpServletResponse response) {
  12.  
    Annex annex = annexService.selectAnnex(id);
  13.  
    String fileName = annex.getFileNewName();
  14.  
    String charsetCode = String.valueOf(StandardCharsets.UTF_8);
  15.  
    try {
  16.  
    File file = new File(annex.getFilePath() File.separator fileName);
  17.  
    //中文乱码解决
  18.  
    String type = request.getHeader("User-Agent").toLowerCase();
  19.  
    // 字符编码格式
  20.  
    if (type.indexOf("firefox") > 0 || type.indexOf("chrome") > 0) {
  21.  
    //谷歌或火狐
  22.  
    fileName = new String(fileName.getBytes(charsetCode), "iso8859-1");
  23.  
    } else {
  24.  
    //IE
  25.  
    fileName = URLEncoder.encode(fileName, charsetCode);
  26.  
    }
  27.  
    // 设置响应的头部信息
  28.  
    response.setHeader("content-disposition", "attachment;filename=" fileName);
  29.  
    // 设置响应内容的类型
  30.  
    response.setContentType(FileUtils.fileContentType(fileName) "; charset=" charsetCode);
  31.  
    // 设置响应内容的长度
  32.  
    response.setContentLength((int) file.length());
  33.  
    // 输出
  34.  
    FileUtils.outStream(Files.newInputStream(file.toPath()), response.getOutputStream());
  35.  
    } catch (Exception e) {
  36.  
    log.error("文件下载异常{}", e.getMessage());
  37.  
    }
  38.  
    }
学新通

文件工具类

  1.  
    /**
  2.  
    * @Description 文件上传工具
  3.  
    * @Author WangKun
  4.  
    * @Date 2023/8/2 10:28
  5.  
    * @Version
  6.  
    */
  7.  
    @Slf4j
  8.  
    public class FileUtils {
  9.  
     
  10.  
    /**
  11.  
    * @param file
  12.  
    * @param path
  13.  
    * @param fileName
  14.  
    * @Description 保存文件
  15.  
    * @Throws
  16.  
    * @Return boolean
  17.  
    * @Date 2023-08-02 12:10:39
  18.  
    * @Author WangKun
  19.  
    */
  20.  
    public static boolean upload(MultipartFile file, String path, String fileName) {
  21.  
    String realPath = path "\\" fileName;
  22.  
    File dest = new File(realPath);
  23.  
    //判断文件父目录是否存在
  24.  
    if (!dest.getParentFile().exists()) {
  25.  
    dest.getParentFile().mkdir();
  26.  
    }
  27.  
    try {
  28.  
    //保存文件
  29.  
    file.transferTo(dest);
  30.  
    return true;
  31.  
    } catch (IllegalStateException | IOException e) {
  32.  
    log.error("文件上传{} 异常", e.getMessage(),e);
  33.  
    e.printStackTrace();
  34.  
    return false;
  35.  
    }
  36.  
     
  37.  
    }
  38.  
     
  39.  
    /**
  40.  
    * @param name
  41.  
    * @Description 设置响应头部信息
  42.  
    * @Throws
  43.  
    * @Return java.lang.String
  44.  
    * @Date 2023-08-02 13:39:15
  45.  
    * @Author WangKun
  46.  
    */
  47.  
    public static String fileContentType(String name) {
  48.  
    String result = "";
  49.  
    String fileType = name.toLowerCase();
  50.  
    if (fileType.endsWith(".png")) {
  51.  
    result = "image/png";
  52.  
    } else if (fileType.endsWith(".gif")) {
  53.  
    result = "image/gif";
  54.  
    } else if (fileType.endsWith(".jpg") || fileType.endsWith(".jpeg")) {
  55.  
    result = "image/jpeg";
  56.  
    } else if (fileType.endsWith(".svg")) {
  57.  
    result = "image/svg xml";
  58.  
    } else if (fileType.endsWith(".doc")) {
  59.  
    result = "application/msword";
  60.  
    } else if (fileType.endsWith(".xls")) {
  61.  
    result = "application/x-excel";
  62.  
    } else if (fileType.endsWith(".zip")) {
  63.  
    result = "application/zip";
  64.  
    } else if (fileType.endsWith(".pdf")) {
  65.  
    result = "application/pdf";
  66.  
    } else if (fileType.endsWith(".mpeg")) { //MP3
  67.  
    result = "audio/mpeg";
  68.  
    } else if (fileType.endsWith(".mp4")) {
  69.  
    result = "video/mp4";
  70.  
    } else if (fileType.endsWith(".plain")) {
  71.  
    result = "text/plain";
  72.  
    } else if (fileType.endsWith(".html")) {
  73.  
    result = "text/html";
  74.  
    } else if (fileType.endsWith(".json")) {
  75.  
    result = "application/json";
  76.  
    } else{
  77.  
    result = "application/octet-stream";
  78.  
    }
  79.  
    return result;
  80.  
    }
  81.  
     
  82.  
     
  83.  
    /**
  84.  
    * @param is
  85.  
    * @param os
  86.  
    * @Description 文件下载输出
  87.  
    * @Throws
  88.  
    * @Return void
  89.  
    * @Date 2023-08-02 13:40:47
  90.  
    * @Author WangKun
  91.  
    */
  92.  
    public static void outStream(InputStream is, OutputStream os) {
  93.  
    try {
  94.  
    byte[] buffer = new byte[10240];
  95.  
    int length = -1;
  96.  
    while ((length = is.read(buffer)) != -1) {
  97.  
    os.write(buffer, 0, length);
  98.  
    os.flush();
  99.  
    }
  100.  
    } catch (Exception e) {
  101.  
    log.error("文件下载{} 异常", e.getMessage(),e);
  102.  
    } finally {
  103.  
    try {
  104.  
    os.close();
  105.  
    is.close();
  106.  
    } catch (IOException e) {
  107.  
    log.error("关闭流{} 异常", e.getMessage(),e);
  108.  
    e.printStackTrace();
  109.  
    }
  110.  
    }
  111.  
    }
  112.  
     
  113.  
     
  114.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiefjgg
系列文章
更多 icon
同类精品
更多 icon
继续加载