【发布时间】:2013-08-04 11:05:14
【问题描述】:
错误
原因:java.lang.IllegalStateException:必须从 blob 调用 上传回调请求。在 com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads(BlobstoreServiceImpl.java:169)
代码
public class UserUploadProfilePictureResource extends ServerResource {
@Post
public void handleBlobstoreUpload(Representation entity) {
Representation rep =null;
if (entity !=null) {
if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) {
Request restletRequest = getRequest();
HttpServletRequest servletRequest = ServletUtils.getRequest(restletRequest);
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(servletRequest);
可能的解决方案(但我不想要)
首先。我不想调用第二个 HttpServlet。
第二。关于这篇文章,有手动编写文件的解决方案:
- how to get uploaded file as blobs in servlet using google app engine
- Upload an image to google app engine blobstore with java programmatically
Google 表示如下:
已弃用:此处用于将文件写入到的文件 API 功能 Blobstore 将在未来某个时间被删除,以支持 将文件写入 Google Cloud Storage 并使用 Blobstore 服务 他们。
可能的解决方案2(但只是一个解决方法的概念)
http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/
Bret Slatkin 指出,当 API 生成 POST URL 时, 用于上传文件,它会创建一个唯一的一次性 URL,该 URL 这可以减轻任何潜在的嗅探。
这非常适合渲染 Web 表单的场景 由用户提交。但是,如果你是 试图提供一个允许上传文件的 REST API(想想 例如像 TwitPic 之类的东西)。在这种情况下,你必须写 您自己的渲染模拟 Web 表单将执行的操作(获取 文件,创建随机 POST URL,调用它,...)
问题
在谷歌应用引擎中存储图像的最佳方法是什么?有比 blobstore 更好的方法吗?如何在 blobstore 中存储图像?
【问题讨论】:
-
您遗漏了一些代码。你在哪里调用 blobstoreService.createUploadUrl(path) 如果你没有调用那个函数,那就是问题所在。
-
@tkaitchuck 我试图在
blobstoreService.getUploads之前调用它。但这并没有改变行为 -
这个问题你解决了吗?我也有同样的问题=(
标签: java file google-app-engine file-upload blobstore