Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

google cloud storage check if object exists (App Engine Java)

My AppEngine project has an API method that sends a resumable URL to an Android Client which then uses that resumable URL to upload an image.

I have another API method that create and returns a signed URL. In the Signed URL you must specify the Google Cloud Storage bucket and object name. However, that object may not exist, in which case, the signed URL will of course not work.

How can I quickly check if an object exists (in a bucket) in my App Engine backend before issuing the Signed URL?

EDIT: My App Engine project is a Cloud Endpoints project.

like image 317
Micro Avatar asked Apr 04 '16 23:04

Micro


1 Answers

You can call getMetadata to check if the object exists without downloading it.

GcsService fileService = GcsServiceFactory.createGcsService();
GcsFilename file = new GcsFilename(bucket, object);
fileService.getMetadata(file);

Alternatively, you can list all objects in a bucket or all objects in a bucket that start with the specified prefix (which can equal the object's name, if necessary).

UPDATE:

This is how I send uploadURL to my client:

@Override
public String getUploadUrl() throws LoginException, VersionException {
    // Verify that call is from a registered user and with proper headers

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    String callbackUrl = "/blob";
    return blobstoreService.createUploadUrl(callbackUrl,
           UploadOptions.Builder.withGoogleStorageBucketName("myBucket));
}
like image 97
Andrei Volgin Avatar answered Oct 07 '22 20:10

Andrei Volgin