这是代码:
public static String getNotFoundUrl(int size) {
try {
BlobKey blob_key = BLOB_STORE.createGsBlobKey("/gs/web_content/placeholder_img.png");
// Simple Test to make sure blob_key points at the right thing.
byte[] image_data = BLOB_STORE.fetchData(blob_key, 0, 100);
Application.getLogger().warning(new String(image_data));
// This parts works and gets the first 100 bytes.
ServingUrlOptions opts = ServingUrlOptions.Builder.withBlobKey(blob_key);
if(size > 0) opts.imageSize(size);
return IMAGES_SERVICE.getServingUrl(opts);
} catch(IllegalArgumentException e) {
Application.getLogger().warning("Unable to serve placeholder image from Cloud Storage.");
Application.getLogger().warning(e.getMessage());
Application.logException(e);
return "/placeholder_img.png";
}
}
我也尝试过使用
ServingUrlOptions.Builder.withGoogleStorageFileName
并得到相同的结果。
在我看来,blob_key 绝对是有效的,因为我可以使用
BlobstoreService.fetchData
读取前 100 个字节并且它没有抛出异常并且成功读取数据。
与其他情况唯一不同的是,我尝试访问的文件是通过 Cloud Console Web UI 而不是通过 AppEngine SDK 上传的。