1
我首先將圖片保存到Google Cloud Storage,並將MIME類型設置爲「image/png」,並將其命名爲「image/png」與文件結束例如「png格式」。這些文件似乎被正確存儲。我可以看到他們在數據存儲瀏覽器:無法獲取來自Google雲端存儲的圖片的服務網址 - >「NOT_IMAGE:無法讀取圖片」
但是,如果我嘗試與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);
你是從Dev服務器還是Live運行你的代碼? http://stackoverflow.com/questions/12868646/google-app-engine-imagesservice-getservingurl-fails-to-read-image – Ryan 2014-08-28 14:34:00
是的,它是開發服務器。但是對於另一方面的Blobstore來說,它在我的開發服務器上工作。鏈接的問題沒有解決方案.. – jan 2014-08-28 14:59:40
如果您閱讀它的評論,它說,它試圖活着時,它的工作「似乎getServingUrl只能在App Engine測試服務器上失敗」嘗試部署它。 – Ryan 2014-08-28 15:05:19