2012-03-01 285 views
0

我已經上傳至文件系統使用API​​來Blob存儲的圖像。這些文件已經成功上傳,我可以在相應的目錄中看到這些斑點。解碼與文件系統API創建的文件

但後來,我該如何解碼這些文件,發送回來的時候給客戶端或使用Blob存儲區API檢索到的,我能夠得到的圖像?眼下/ Blob存儲/寫:XXX是不是對我很有用,因爲當我在包裝的<img src="/blobstore/writable:xxx" />路徑,它並沒有給我一個圖像。

回答

0

我把它固定的:

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不會更改爲同一個blob。這也可以讓你動態調整大小和裁剪你正在服務的圖像。這些URL是公開的,所以如果您想要某種形式的訪問控制來提供您可能需要的圖像選項(2)。

  2. 使用serveBlob和請求處理程序來發送圖像。沒有動態調整大小(如果需要,可以在處理程序中自行完成),但如果需要,可以ACL對每個請求進行ACL。

+1

月1日,我不打算將圖像存儲在Blob存儲區。相反,我正在使用文件系統API。但我是一個例外,而這樣做:'java.lang.IllegalArgumentException異常:無法讀取image'。你知道我可能做錯什麼嗎? – drecute 2012-03-02 15:20:44

+0

FYI文件系統API存儲BLOB的任一的Blobstore或谷歌存儲。您需要從存儲的對象中生成一個blobkey。 – 2012-03-02 22:22:50