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