我正在使用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>
我只是想出了一个解决方案,所以这是我对自己问题的回答:
通过对我的Goolge Cloud Storage存储桶使用签名的URL进行了修复。我在这个问题上待了一个星期,发现当您在GAE上运行项目时,没有正确的方法来获取自己的文件路径(例如C:/ users /)。
猜猜这个google doc(仅当您的项目在本地运行时,将对象上传到GCS才有用。因此,解决我的问题的方法是为我的存储桶生成一个已签名的URL并通过它访问存储桶。以下是有用的链接:如何为GCS创建签名的url
谢谢所有回答这个问题的人!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句