Elastic Beanstalk 中的 Springboot 服务器创建了我看不到的文件
Springboot server in Elastic Beanstalk creates files that I can't see
我有一个部署到 AWS 中 Elastic Beanstalk 环境的 Springboot 服务器。基本功能是这样的:
1. Upload a file to the server
2. The server processes file by doing some data manipulation.
3. Then the file that is created is sent to a user via email.
奇怪的是,上面提到的功能 是 工作。输出文件已成功发送到我的电子邮件收件箱。 但是,当通过 SSH 连接到实例时无法看到该文件。为数据操作创建的整个目录并不存在。我到处都看了。
为了测试这个,我什至在我的 Springboot Controller
中创建了一个简单的函数,如下所示:
@GetMapping("/")
public ResponseEntity<String> dummyMethod() {
// TODO : remove line below after testing
new File(directoryToCreate).mkdirs();
return new ResponseEntity<>("Successful health check. Status: 200 - OK", HttpStatus.OK);
}
如果我使用 Postman 访问此端点,则无法通过我通过 SSH 连接到的终端看到该目录。该程序正在运行,所以我知道代码在这个意义上是正确的,但是我看不到文件和目录。
此外,如果我在本地 运行 服务器(使用 Windows 或 Linux)并点击此端点,则目录已成功创建。
更新:
我在 /var/app
的环境中找到了该应用程序所在的位置。但是我的文件夹和文件仍然不存在,只有源代码文件等。我的服务器应该创建的文件仍然丢失。我什至可以在创建文件后打印出文件的绝对路径,但该文件仍然不存在。这是一个例子:
Files.copy(source, dest);
logger.info("Successfully copied file to: {}", dest.getAbsolutePath());
将打印...
Successfully copied file to: /tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58/results_map_GVA.csv
我的服务器中不存在该路径,但我可以在处理后通过服务器代码通过电子邮件将其发送给我。但是,如果我通过 SSH 进入实例并转到该路径,那里什么也没有。
如果我使用命令:find . -name "GVA*"
(搜索我正在寻找的文件)然后它打印:
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-09 18.15.59
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.26.34
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-09 18.15.59
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.26.34
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58
但这看起来像是在跟踪文件版本之间的差异,因为我在文件路径中看到 diff
和 merged
。我只想找到该文件实际所在的位置。
如果您需要将上传的文件存储在 Spring BOOT 应用程序的某个位置,请考虑使用 Amazon S3 存储桶而不是将文件写入服务器上的文件夹。例如,假设您正在使用照片应用程序并且可以通过 Spring BOOT 应用程序上传照片。不要将其放在服务器上的目录中,而是使用 Amazon S3 Java API 将文件存储在 Amazon S3 存储桶中。
下面是一个使用 Spring BOOT 应用并通过将上传文件放入存储桶来处理上传文件的示例。
Creating a dynamic web application that analyzes photos using the AWS SDK for Java
此示例应用程序还向您展示了如何使用 SES API 通过电子邮件向用户发送数据(本例中为报告)。
我有一个部署到 AWS 中 Elastic Beanstalk 环境的 Springboot 服务器。基本功能是这样的:
1. Upload a file to the server
2. The server processes file by doing some data manipulation.
3. Then the file that is created is sent to a user via email.
奇怪的是,上面提到的功能 是 工作。输出文件已成功发送到我的电子邮件收件箱。 但是,当通过 SSH 连接到实例时无法看到该文件。为数据操作创建的整个目录并不存在。我到处都看了。
为了测试这个,我什至在我的 Springboot Controller
中创建了一个简单的函数,如下所示:
@GetMapping("/")
public ResponseEntity<String> dummyMethod() {
// TODO : remove line below after testing
new File(directoryToCreate).mkdirs();
return new ResponseEntity<>("Successful health check. Status: 200 - OK", HttpStatus.OK);
}
如果我使用 Postman 访问此端点,则无法通过我通过 SSH 连接到的终端看到该目录。该程序正在运行,所以我知道代码在这个意义上是正确的,但是我看不到文件和目录。
此外,如果我在本地 运行 服务器(使用 Windows 或 Linux)并点击此端点,则目录已成功创建。
更新:
我在 /var/app
的环境中找到了该应用程序所在的位置。但是我的文件夹和文件仍然不存在,只有源代码文件等。我的服务器应该创建的文件仍然丢失。我什至可以在创建文件后打印出文件的绝对路径,但该文件仍然不存在。这是一个例子:
Files.copy(source, dest);
logger.info("Successfully copied file to: {}", dest.getAbsolutePath());
将打印...
Successfully copied file to: /tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58/results_map_GVA.csv
我的服务器中不存在该路径,但我可以在处理后通过服务器代码通过电子邮件将其发送给我。但是,如果我通过 SSH 进入实例并转到该路径,那里什么也没有。
如果我使用命令:find . -name "GVA*"
(搜索我正在寻找的文件)然后它打印:
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-09 18.15.59
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.26.34
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/diff/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-09 18.15.59
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.26.34
./var/lib/docker/overlay2/fbf04e23e39d61896a1c935748a63f2d3836487d9b166bae490764c30b8870ae/merged/tmp/TESTING/Test-Results/GVA_output_2021-12-13 12.32.58
但这看起来像是在跟踪文件版本之间的差异,因为我在文件路径中看到 diff
和 merged
。我只想找到该文件实际所在的位置。
如果您需要将上传的文件存储在 Spring BOOT 应用程序的某个位置,请考虑使用 Amazon S3 存储桶而不是将文件写入服务器上的文件夹。例如,假设您正在使用照片应用程序并且可以通过 Spring BOOT 应用程序上传照片。不要将其放在服务器上的目录中,而是使用 Amazon S3 Java API 将文件存储在 Amazon S3 存储桶中。
下面是一个使用 Spring BOOT 应用并通过将上传文件放入存储桶来处理上传文件的示例。
Creating a dynamic web application that analyzes photos using the AWS SDK for Java
此示例应用程序还向您展示了如何使用 SES API 通过电子邮件向用户发送数据(本例中为报告)。