![](/img/trans.png)
[英]Uploading ZIP via Google App Engine servlet, and saving content to Cloud Storage (Java)
[英]Uploading Files to Google Cloud Storage via Google App Engine using Java: (No such file or directory)
我正在使用 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>
我刚刚想出了一个解决方案,所以这是我对自己问题的回答:
通过对我的 Goolge Cloud Storage 存储桶使用签名的 url 来修复它。 我在这个问题上花了一周时间,并认为当您在 GAE 上运行项目时,没有正确的方法可以访问您自己的文件路径(如 C:/users/)。
猜猜这个谷歌文档(将对象上传到 GCS仅在您的项目在本地运行时才有用。所以我的问题的解决方案是为我的存储桶生成签名的 URL 并通过它访问存储桶。这是有用的链接: 如何为 GCS 创建签名的 url
感谢所有回答这个问题的人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.