对于一个应用程序,我已经在blobstore和云存储上上传了文件。
我是通过以下方式生成上传链接的:
upload_url = blobstore.create_upload_url('/upload', gs_bucket_name=app_identity.get_default_gcs_bucket_name())文件同时保存在blobstore和云存储上,我可以执行GQL查询来从blobstore检索任何我想要的文件。但是,我无法找到在云存储中获取文件名的方法。
当文件上传到云存储时,会自动为其分配一个长文件名。
我找到了一个命令,但我不确定如何使用它:https://cloud.google.com/appengine/docs/standard/python/refdocs/google.appengine.ext.blobstore.blobstore#google.appengine.ext.blobstore.blobstore.BlobInfo
当我尝试的时候:
cloud_store = []
for upload in uploads:
gcs_link = blobstore.BlobInfo(db.get(upload)).gs_object_name
cloud_store.append(gcs_link)这里,uploads存储了对具有blobstore.BlobReferenceProperty()属性的种类执行的GQL查询的结果。
我得到了这个错误:
BadArgumentError: Expected an instance or iterable of (<type 'basestring'>, <class 'google.appengine.api.datastore.Entity'>, <class 'google.appengine.api.datastore_types.Key'>); received <models.PhotoAlbum object at 0x00000000054CD7B8> (a PhotoAlbum).当我尝试的时候:
cloud_store = []
for upload in uploads:
gcs_link = blobstore.BlobInfo(upload.key()).gs_object_name
cloud_store.append(gcs_link)我得到了这个错误:
TypeError: Must provide Entity or BlobKey发布于 2017-11-23 11:26:08
由于uploads是数据存储查询的结果,这意味着它包含数据存储实体的列表(我假设它不是keys_only查询)。因此,upload就是这样一个实体,它包含blobstore.BlobReferenceProperty()属性(您没有指定它的名称,让我们假设它叫做blob_key)。
如果是这样的话,你需要传递给blobstore.BlobInfo()的是blob键,也就是upload的数据存储实体属性,而不是实体本身的键。所以我会尝试一下(上面关于属性名的假设):
gcs_link = blobstore.BlobInfo(upload.blob_key).gs_object_name发布于 2021-07-28 01:38:53
通过Java实现的GCS:
您需要Google Cloud Storage服务对象,您可以通过以下a步骤获得该对象:
A.配置
googleServiceAccountCredentials和projectIdStorageOptions configureStorageOptions =
StorageOptions.newBuilder().setProjectId(projectId).setCredentials(googleServiceAccountCredentials).build();通过步骤1:中的configureStorageOptions获取的
Storage getStorage = configureStorageOptions.getService();因为从上面代码片段中可以看到Google Storage对象。
B.用例
这里我们将举一个例子,上传到Google Storage inside存储桶的文件是基于requestNumber的,即请求号将是Google Storage存储桶中的一个目录。
所以我们必须创建如下代码片段所示的路径:
String path = bucketName.concat("/").concat(requestNumber).concat("/");备注:
/,如上面的路径所示。path将在下面的代码片段中引用。现在你可以参考下面的代码片段,用于从Google Storage帐户获取文件名:
C.从GCS获取文件名的代码片段
List<String> supportingDocuments = new ArrayList<String>();
try {
log.info("Get FileName From Path {} With BucketName As {}", path, bucketName);
Page<Blob> blobs = getStorage().list(bucketName, Storage.BlobListOption.currentDirectory(), Storage.BlobListOption.prefix(path));
for (Blob blob:blobs.iterateAll()){
String fileName = blob.getName().replace(path, "");
supportingDocuments.add(fileName);
}
} catch (Exception e){
log.error(e.getMessage());
}备注:
getStorage()方法与ref getStorage的第二点相同,即Storage A. Configure Objecthttps://stackoverflow.com/questions/47442097
复制相似问题