簡體   English   中英

使用 Java 通過 Google App Engine 將文件上傳到 Google Cloud Storage:(沒有這樣的文件或目錄)

[英]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>

您可以按照此示例將文件從本地存儲上傳到 GAE 標准 java(單擊“代碼示例”選項卡和“Java”),您可以在此文檔中找到更多信息

考慮到在應用引擎標准中寫入本地磁盤僅限於 /tmp

如果您在部署 App Engine 的代碼上使用 C:/users/.. 之類的文件路徑 Java 將無法找到它

我剛剛想出了一個解決方案,所以這是我對自己問題的回答:

通過對我的 Goolge Cloud Storage 存儲桶使用簽名的 url 來修復它。 我在這個問題上花了一周時間,並認為當您在 GAE 上運行項目時,沒有正確的方法可以訪問您自己的文件路徑(如 C:/users/)。

猜猜這個谷歌文檔(將對象上傳到 GCS僅在您的項目在本地運行時才有用。所以我的問題的解決方案是為我的存儲桶生成簽名的 URL 並通過它訪問存儲桶。這是有用的鏈接: 如何為 GCS 創建簽名的 url

感謝所有回答這個問題的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM