2014-08-28 65 views
1

我首先將圖片保存到Google Cloud Storage,並將MIME類型設置爲「image/png」,並將其命名爲「image/png」與文件結束例如「png格式」。這些文件似乎被正確存儲。我可以看到他們在數據存儲瀏覽器:無法獲取來自Google雲端存儲的圖片的服務網址 - >「NOT_IMAGE:無法讀取圖片」

enter image description here

但是,如果我嘗試與com.google.appengine.api.images.ImagesService再裝回,打電話ImagesService.getServigUrl(),它拋出的錯誤:

java.lang.IllegalArgumentException: NOT_IMAGE: Failed to read image 

所以這似乎認爲它不是一個圖像。但爲什麼?它有MIME類型集,它有文件結尾。代碼如下所示:

ImagesService imagesService = ImagesServiceFactory.getImagesService(); 
Image newImage = imagesService.applyTransform(crop, oldImage); 

final GcsService gcsService = 
     GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance()); 

AppIdentityService appservice = com.google.appengine.api.appidentity.AppIdentityServiceFactory.getAppIdentityService(); 

GcsFilename fileName = new GcsFilename(appservice.getDefaultGcsBucketName(), Long.toString(random.nextLong(), 36)+"."+newImage.getFormat().toString().toLowerCase()); 

GcsFileOptions gcsOptions = new GcsFileOptions.Builder() 
    .mimeType("image/"+newImage.getFormat().toString().toLowerCase()) 
    .acl("public-read").build(); 

GcsOutputChannel outputChannel = 
     gcsService.createOrReplace(fileName, gcsOptions); 

ObjectOutputStream oout = 
    new ObjectOutputStream(Channels.newOutputStream(outputChannel)); 
oout.writeObject(newImage.getImageData()); 
oout.close(); 


ServingUrlOptions suo = ServingUrlOptions.Builder.withGoogleStorageFileName("/gs/"+fileName.getBucketName()+"/"+fileName.getObjectName()).secureUrl(true); 
String s = imagesService.getServingUrl(suo); 
System.out.println(s); 
+0

你是從Dev服務器還是Live運行你的代碼? http://stackoverflow.com/questions/12868646/google-app-engine-imagesservice-getservingurl-fails-to-read-image – Ryan 2014-08-28 14:34:00

+0

是的,它是開發服務器。但是對於另一方面的Blobstore來說,它在我的開發服務器上工作。鏈接的問題沒有解決方案.. – jan 2014-08-28 14:59:40

+0

如果您閱讀它的評論,它說,它試圖活着時,它的工作「似乎getServingUrl只能在App Engine測試服務器上失敗」嘗試部署它。 – Ryan 2014-08-28 15:05:19

回答

0

可能它不是您上傳的圖像MIME類型,請檢查您上傳文件的MIME類型。

相關問題