首页 > 解决方案 > 使用 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>

标签: javaspringmavengoogle-app-enginegoogle-cloud-storage

解决方案


您可以按照此示例将文件从本地存储上传到 GAE 标准 java(单击“代码示例”选项卡和“Java”),您可以在此文档中找到更多信息

考虑到在应用引擎标准中写入本地磁盘仅限于 /tmp

如果您在部署的代码上使用 C:/users/.. 之类的文件路径,则 App Engine Java 将无法找到它


推荐阅读