在不同的网络服务器上部署 UI 和中间轮胎时,AWS S3 上传文件不起作用,但在 localhost SpringBoot 中起作用
Posted
技术标签:
【中文标题】在不同的网络服务器上部署 UI 和中间轮胎时,AWS S3 上传文件不起作用,但在 localhost SpringBoot 中起作用【英文标题】:AWS S3 uploading file does not work when deployed UI and middle tire on different network servers but works in localhost SpringBoot 【发布时间】:2022-01-09 15:06:44 【问题描述】:上图显示了我的应用程序部署的结构.. Spring Boot 应用程序具有以下 aws 配置。
应用程序正在本地运行。我可以将文件写入 s3 存储桶。 当我将代码部署在不同的服务器上时,如上图所示。它无法编写 s3 存储桶 显示以下错误
Error while uploading the file to S3java.io.FileNotFoundException: sample.txt (Permission denied)"
注意:这些服务器位于不同的位置。
我该如何克服这个问题。 我有办法
-
将上传文件写入 UI Server 文件夹并使用脚本上传
在 s3
任何人都有其他解决方案,请提出建议。
编辑 1: 1.我可以接收请求表单UI服务器。但请求中不存在文件 2.其他获取请求正在工作 编辑 2
控制器
@PostMapping("/request")
ReturnStatus saveRequest(HttpServletRequest request,
@RequestParam(value = "file", required = true)
MultipartFile uploadedFile) throws InvalidInputException
AuthDto auth = (AuthDto) request.getAttribute(AUTH_DTO);
return requestService.saveRequest(
new RequestParams( uploadedFile));
服务类逻辑
File uploadFile = convertMultiPartToFile(params.getLookUpValues());
s3ClientBuilder.build().putObject(new PutObjectRequest(s3BucketName, fileName, uploadFile));
public static File convertMultiPartToFile(MultipartFile file) throws IOException
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
编辑 3
在 UI 服务器 tomcat 中创建一个临时文件夹
一旦我点击上传文件保存到临时和请求去弹性 beantalk 并保存元数据。
How the s3 bucket file upload work?
Need to write any separate script? if yes how its trigger
如有错误请指正
【问题讨论】:
您能否检查一下您是否在 Spring Boot 中正确接收了文件。从异常看来,这不是 s3 问题,而是文件本身没有得到解决。 这是正确的。否则我不会在本地工作 请发布您的 spring-boot 代码。您是先在本地保存文件,然后再尝试上传吗?如果是这种情况,在 EB 中您需要正确配置对本地文件系统的访问。 @kgiannakakis 添加。 【参考方案1】:默认为 /tmp 的目录有一些 spring-boot 属性。您的 EB 用户将无权访问此文件夹。这些设置允许我们在 Elastic Beanstalk 环境中通过 Spring Boot 使用分段上传:
server.tomcat.basedir: $user.dir
spring.http.multipart.location: $user.dir\
错误可能来自这一行:
File convFile = new File(file.getOriginalFilename());
您正在尝试将文件保存在基本目录中,但您无权访问它。遵循上述建议。或者,阅读此question,了解如何正确创建 tmp 文件夹。
【讨论】:
server.tomcat.basedir-> 这将是 UI Server tomcat 的位置,对吧? 是的,适用于嵌入式 tomcat。请参阅 docs.spring.io/spring-boot/docs/current/reference/html/… 和 docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/…。您需要将多部分位置设置为您有权访问的文件夹。 @kgiannakakis 你能解释一下上传请求的流程 请同时发布您的 convertMultiPartToFile 方法的代码。您可能正在临时位置创建文件。在本地您可以访问,但在 EB 中没有。 @kgiannakakis 添加以上是关于在不同的网络服务器上部署 UI 和中间轮胎时,AWS S3 上传文件不起作用,但在 localhost SpringBoot 中起作用的主要内容,如果未能解决你的问题,请参考以下文章