java - 使用 Java 通过 Google App Engine 将文件上传到 Google Cloud Storage:(没有这样的文件或目录)
问题描述
我正在使用 GAE 开发一个 Spring-MAVEN JAVA 项目(主要是后端的 REST API)。我还使用 GCS(谷歌云存储)来存储一些图像和视频。问题是当我在本地服务器(tomcat 8.0)中执行我的文件时,它可以完美运行并将文件上传到 GCS。
但是,当我将文件部署到 GAE 并执行时,它会返回java.io.FileNotFoundException (No such file or directory) 错误。我猜 GAE 服务器无法从我的计算机中找到文件。
我已经尝试了很多事情,但我仍然没有找到正确的答案。
这些是我与问题相关的代码:
@RestController
@RequiredArgsConstructor
public class GCSController {
private final GCSService gcsService;
@PostMapping("gcs/upload")
public ResponseEntity localUploadToStorage(@RequestBody UploadReqDto uploadReqDto) throws IOException {
BlobInfo fileFromGCS = gcsService.uploadFileToGCS(uploadReqDto);
return ResponseEntity.ok(fileFromGCS.toString());
}
}
@Service
@RequiredArgsConstructor
public class GCSService {
private final Storage storage;
@SuppressWarnings("deprecation")
public BlobInfo uploadFileToGCS(UploadReqDto uploadReqDto) throws IOException {
BlobInfo blobInfo =storage.create(
BlobInfo.newBuilder(uploadReqDto.getBucketName(), uploadReqDto.getUploadFileName())
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(Acl.User.ofAllAuthenticatedUsers(), Acl.Role.READER))))
.build(),
new FileInputStream(uploadReqDto.getLocalFileLocation()));
return blobInfo;
}
}
UploadReqDto 为 bucketname、uploadFileName 和 localFilelocation 创建构造函数、getter。
这是我为 API 添加的 Maven 依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-storage</artifactId>
<version>1.2.3.RELEASE</version>
解决方案
您可以按照此示例将文件从本地存储上传到 GAE 标准 java(单击“代码示例”选项卡和“Java”),您可以在此文档中找到更多信息
考虑到在应用引擎标准中写入本地磁盘仅限于 /tmp
如果您在部署的代码上使用 C:/users/.. 之类的文件路径,则 App Engine Java 将无法找到它
推荐阅读
- flutter - 如何在颤动中更改另一个类的字段值?
- flutter - 在使用 Streambuilder 从 firebase 实时数据库获取数据(子子键)时,数据在保存时不按顺序排列
- c# - cshtml页面显示变量名而不是值
- git - $(NugetPackageRoot) 宏在 VS2019 中自动更改为 *.sfproj 文件中的“..\packages\....”,在推送到 Git 之前不断需要撤消更改
- python - OpenCV(4.1.2) 错误: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
- arrays - 如何迭代对象数组?
- c# - 在 XAML 中可视化 ObservaleCollection 属性
- .net-core - 使用 microsoft DI 的运行时构造函数参数
- python - 如何将文本文件中由:分隔的字符串和数字拆分为python中的行和列
- html - html 表单发布到 aspx 页面,标题字段未发布。Chrome 说请求是 GET,根本不显示表单数据