使用Java通过Google App Engine将文件上传到Google Cloud Storage :(无此类文件或目录)

qpwoei :

我正在使用GAE开发Spring-MAVEN JAVA项目(主要是后端的REST API)。我也在使用GCS(Google云存储)来存储一些图像和视频。问题是,当我在本地服务器(tomcat 8.0)中执行文件时,它可以完美运行并将文件也上传到GCS。

但是,当我将文件部署到GAE并执行时,它将返回java.io.FileNotFoundException(无此类文件或目录)error我猜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使构造函数,存储桶名称的getter,uploadFileName和localFilelocation。

这是我为API添加的Maven依赖项:

    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-storage</artifactId>
<version>1.2.3.RELEASE</version>
qpwoei :

我只是想出了一个解决方案,所以这是我对自己问题的回答:

通过对我的Goolge Cloud Storage存储桶使用签名的URL进行了修复。我在这个问题上待了一个星期,发现当您在GAE上运行项目时,没有正确的方法来获取自己的文件路径(例如C:/ users /)。

猜猜这个google doc(仅当您的项目在本地运行时,将对象上传到GCS才有用。因此,解决我的问题的方法是为我的存储桶生成一个已签名的URL并通过它访问存储桶。以下是有用的链接:如何为GCS创建签名的url

谢谢所有回答这个问题的人!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Google App Engine(Python)将文件上传到Google Cloud Storage

使用Google App Engine将大文件上传到Google Cloud Storage

使用Flask将文件上传到Google Cloud Storage

使用 Codeigniter 将文件上传到 Google Cloud Storage

使用 For 循环将多个文件上传到 Google Cloud Storage

将 xml 文件上传到 Google Cloud Storage 时出错

Alamofire无法将文件上传到Google Cloud Storage

将文件上传到Google Cloud Storage:500后端错误

将.raw文件上传到Google Cloud Storage

使用Python将文件上传到Google Cloud Storage Bucket子目录

如何将文件上传到 Google Cloud Storage Bucket 子目录

将大型视频文件上传到Google App Engine

如何通过Google App Engine中的应用程序将文件写入Google Cloud Storage?

如何通过Cloud Functions将文件上传到Cloud Storage并使用Firestore控制对Cloud Storage的访问?

使用JSON API将文件上传到Google Cloud Storage,错误401未经授权

使用PHP和Ajax将文件上传到Google Cloud Storage Bucket

如何使用JSON API和CloseableHttpClient将文件上传到Google Cloud Storage存储桶?

使用 Node.js 将文件上传到 Google Cloud Storage(已声明“bucketName”)

使用Python将文件上传到Google Cloud Storage签名的URL

使用C#中的HMAC密钥将文件上传到Google Cloud Storage

将文件上传到Google Cloud Storage而不在本地下载文件?

如何从Google App Engine读取Google Cloud Storage文件

将文件直接上传到Google Cloud Storage for GAE应用

将Python文件上传到Google Cloud Storage Bucket返回管道中断错误

将python对象上传到Google Cloud Storage,而不保存到文件中

无法从Django将文件上传到Google Cloud Storage(本地Windows ENV

从Localhost或外部服务器将文件上传到Google Cloud Storage

如何使用Java App Engine将图片文件正确上传到Google云端存储?

如何通过Google App脚本从Google Cloud Storage获取上传的文件URL