文件上传、解析及存储(前端+后端) 您所在的位置:网站首页 上传文件的端口叫什么名称 文件上传、解析及存储(前端+后端)

文件上传、解析及存储(前端+后端)

2024-05-25 06:06| 来源: 网络整理| 查看: 265

文件在服务器的存储目录找不到了,500报错??? 在这里插入图片描述 那是一个睡意沉沉的清晨,准备上传一个包含了几个亿RMB的机密文件时,却抛了个500,顿时清醒了许多,急忙打开那该死的服务器(映入眼帘的):

10.88.21.210 2020-12-03 20:03:09:480 ERROR [] c.s.d.f.i.a.WebErrorInterceptor 45 Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:124) at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115) ....... Caused by: java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.beginPart(MultiPartParserDefinition.java:261) at io.undertow.util.MultipartParser$ParseState.headerName(MultipartParser.java:208) .......

一看,傻眼了,事情不太妙,这是神马情况?怎么就找不到这个/tmp目录了呢?便请教了百度大哥,他告诉我原因:Spring Boot在启动时,会在操作系统生成一个名为/tmp的临时目录,如果超过10天未使用该临时目录,则系统会自动执行systemd-tmpfiles-clean.service服务来清除该临时目录。当上传文件的请求到来时,Spring Boot会痴痴的去寻觅/tmp,找不到了也不会再去新建一个目录,这就是爱吧!我被感动了,我决心成人之美。给他想了以下解决方案: a. 在服务器新建一个名为/tmp的临时目录(不可取:强“建”的目录不久,Spring Boot 超过10天不搭理/tmp,爱依旧会消失的) b. 重启服务,会再此自动生产临时目录(不可取:今生不能再做情人,来世再做夫妻,奈何命运弄Spring Boot,依旧会重蹈覆辙) c. Spring Boot官方回应,Spring Boot 2.1.4修复了该问题,我没有亲自尝试过(我信你个鬼,你个糟老头子坏得狠),但Spring Boot 2.2.6没有修复,可能只是2.1.4版本修复了。 在这里插入图片描述 d. 在yml文件配置一个目录,指定文件存储的目录,但必须保证这个目录存在,且具有读写的权限。

spring: servlet: multipart: location: /uploadFile

e. 优化方案d,写一个配置类,即使yml文件中配置的目录不存在,也可以自动创建目录。

@Slf4j @Configuration public class UndertowConfig { @Value("${spring.servlet.multipart.location}") private String filePath; @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); if (!StringUtil.isNullOrEmpty(filePath)) { File file = new File(filePath); log.info("文件存储路径:{}", file); if (!file.exists()) { boolean dirCreated = file.mkdir(); if(! dirCreated){ throw new RuntimeException("create file " + file.getAbsolutePath() + " failed!"); } } // 需要写和执行的权限 if(! (file.canWrite() && file.canExecute())){ throw new RuntimeException(file.getAbsolutePath() + " Permission denied!"); } } factory.setLocation(filePath); return factory.createMultipartConfig(); } }

文件模版的下载链接失效了??? 曾在OSS界面将文件模版进行上传,但一段时间后发现链接URL失效了,导致无法下载模版。打开OSS发现,每个URL的有效时间最长是32400秒,每间隔32400秒就会生成一个新的URL,旧的URL就会失效。 **加粗样式** 为了实现URL长期不失效,可通过OSSClient的generatePresignedUrl(String bucketName, String key, Date expiration)进行上传,Date expiration参数可设置URL的有效时长,如10年,20年。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有