2016-07-09 10 views
0

元のファイルにアクセス許可がある場合でも、サムネイル画像にはパブリックリンクがありませんUser - allUsers - Readerおよびすべてのユーザーがファイルにアクセスするための公開リンクhttps://storage.googleapis.com/{buckets}/{filename}App Engine&Cloud Storage公開リンクのアクセス権を持つファイルをプログラム的に保存する方法

この権限をサムネイル画像に追加するにはどうすればよいですか。

public static void thumbnailImage(String filename, int width, int height) throws IOException{ 
    GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder() 
       .initialRetryDelayMillis(10) 
       .retryMaxAttempts(10) 
       .totalRetryPeriodMillis(15000) 
       .build()); 
    AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService(); 
    ImagesService imagesService = ImagesServiceFactory.getImagesService(); 
    // Make an image from a Cloud Storage object, and transform it. 
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
    BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + appIdentity.getDefaultGcsBucketName() +"/"+ filename); 

    Image thumb = null; 
    try{ 
     Image blobImage = ImagesServiceFactory.makeImageFromBlob(blobKey);   
     Transform resize = ImagesServiceFactory.makeResize(width, height); 
     thumb = imagesService.applyTransform(resize, blobImage); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    String extension = Files.getFileExtension(filename); 
    filename = stripExtension(filename); 
    filename = String.format("%1$s_%2$s.%3$s", filename, thumbnail, extension); 

    if(thumb!=null) 
    // Write the transformed image back to a Cloud Storage object. 
    gcsService.createOrReplace(
     new GcsFilename(appIdentity.getDefaultGcsBucketName(), filename), 
     new GcsFileOptions.Builder().mimeType("image/jpeg").build(), 
     ByteBuffer.wrap(thumb.getImageData())); 
} 

答えて

1

GcsFileOptionパラメータ「acl」を使用すると、他のユーザーに表示させることができます。だから、これを最後にそのビットを変更:

new GcsFileOptions.Builder().mimeType("image/jpeg").acl("public-read").build(), 

パブリックリンクオブジェクトは、サムネイルの名前であることを除き、同じstorage.googleapis.com/bucket/objectパターンになります。

+0

ありがとうございましたが、acl関数に関する関連ドキュメントを見つけることができず、 'public-read'を削除する方法や他の権限に変更する方法があります。 –

+1

そのACLフィールドは、gsutil/XML APIフォームのGCS「事前定義ACL」のいずれかをとります。完全なリストは次のURLで定義されています:https://cloud.google.com/storage/docs/access-control/lists#predefined-acl GCSはより精巧なACLオプションをサポートしていますが、特定のクライアントがそれらを公開しているかどうかはわかりませんオプション。 –

+0

こんにちは、今私は別の問題があります。サムネイルファイルのサイズが元のファイルよりも大きい場合は、助けてください。私はここに別の質問をするhttp://stackoverflow.com/questions/38358649/app-engine-and-cloud-storage-i-generate-thumbnail-image-has-larger-file-size-tha –

関連する問題