2012-03-01 8 views
0

ファイルシステムAPIを使用してブロブストアにアップロードされた画像があります。ファイルが正常にアップロードされ、それぞれのディレクトリにブロブが表示されます。ファイルシステムAPIで作成されたファイルのデコード

しかし、これらのファイルをデコードして、クライアントに返信するか、BLOBSTORE APIを使用して取得すると、イメージを取得できるようになりますか?今すぐ/ blobstore/writable:xxxは役に立ちません。なぜなら、私が<img src="/blobstore/writable:xxx" />にパスをラップすると、それは私にイメージを与えないからです。

答えて

0

私はそれがこれで固定してしまった:1で

FileService fileService = FileServiceFactory.getFileService(); 
    AppEngineFile writableFile = fileService.createNewBlobFile(request.getParameter("qqfile")); 
    FileWriteChannel writeChannel = null; 
     try { 
       byte[] buffer = new byte[4096]; // 4MB 
       lock = true; 
       writeChannel = fileService.openWriteChannel(writableFile, lock); 
       // increase the buffer size as you are reading from the 
       // input stream. Read the input stream into buffer 
       for (int n; (n = stream.read(buffer)) != -1;){ 
        writeChannel.write(ByteBuffer.wrap(buffer)); 
       } 
      } finally { 
        writeChannel.closeFinally(); 
      } 

    BlobKey blobKey = fileService.getBlobKey(writableFile); 
    ImagesService imagesService = ImagesServiceFactory.getImagesService(); 

    // produces something like http://localhost:8888/_ah/img/SU52WMsoCRP3kqAvQqVW3g 
    String imageUrl = imagesService.getServingUrl(blobKey); 
1

オプションのカップル -

  1. 使用getServingUrlは、あなたのイメージにURLを作成し、あなたの応答の一部としてそのURLを返します。同じURLのURLは変更されないので、このURLをデータストアに保存してください。これにより、表示中の画像のサイズを動的に変更してトリミングすることもできます。 URLは公開されていますので、画像を提供するための何らかのアクセスコントロールが必要な場合は、オプション(2)が必要です。

  2. serveBlobとリクエストハンドラを使用して画像を送信します。ダイナミックリサイズは必要ありません(必要に応じてハンドラ内で自分で行うこともできます)が必要な場合は、各リクエストにACLを割り当てることができます。

+1

、私はブロブストアに画像を保存するつもりはありません。代わりに私はファイルシステムAPIを使用しています。しかし、私はそれを行う際に例外です: 'java.lang.IllegalArgumentException:イメージの読み込みに失敗しました'。私が間違っていることが何であるかあなたは何か考えていますか? – drecute

+0

FYIファイルシステムAPIは、ブロブストアまたはGoogleストレージのいずれかにブロブを保存します。格納されたオブジェクトからブロブキーを生成する必要があります。 –

関連する問題