2

我正在使用 Java 开发 Appengine 应用程序,该应用程序允许用户上传通过名为 PaintWeb ( http://code.google.com/p/paintweb/ ) 的 HTML5 画布库绘制的图像。

目前我有一个servlet,它从paintweb javascript库接收XMLHttpRequest POST作为formencoded图像。

  1. Paintweb.js 库发送 XMLHttpRequest POST

      send       = 'dataURL=' + encodeURIComponent(ev.dataURL), 
      headers    = {'Content-Type': 'application/x-www-form-urlencoded'}; 
    
  2. 自定义 servlet 将表单编码的图像数据解码为 blob,并将其与关联的绘图实体一起存储在 Datastore 中

  3. 自定义 servlet 以 ContentType("image/png") 为数据存储区中的 Blob 提供服务BlobstoreService 和 ImageService

根据文档(http://code.google.com/appengine/docs/java/blobstore/overview.html#Uploading_a_Blob),主要的停止点似乎是我需要发布一个表单:

 <input type="file" name="myFile"> 

我认为 Paintweb 不可能做到这一点。如果服务器端有某种方法可以将 Blob 存储在 Blobstorage(而不是数据存储区)中,则可能的解决方法是,这样您就可以获得不使用 CPU 配额来提供图像的好处。

使用 Appengine URL Fetch 服务并将图像 blob 上传从服务器端转发到 Blobstorage“createUploadURL()”是否可能甚至是一个好主意。

http://code.google.com/appengine/docs/java/urlfetch/usingjavanet.html

似乎有可能,但不确定从长远来看它是否会节省我的资源(图像是简单的小图,可以查看比上传时间更多的次数,所以我觉得我会受益于存储/从 BlobstoreService 提供服务。

4

1 回答 1

2

您最好的选择是使用 XMLHTTPRequest,其中包含创建的图像的 multipart/form-data 编码主体。这可以构建以匹配 blobstore 的期望。要遵循的程序将如下所示:

  1. 调用返回新的 blobstore 上传 URL 的 JSON API
  2. 构建一个 MIME 消息,其中包含图像数据作为一部分,以及您想要包含的任何其他字段。
  3. 使用 XMLHTTPRequest 将表单上传到 blobstore。

为此,您需要自己构建 mime 消息,或者找到一个 Javascript 库来为您完成。

于 2010-09-20T09:57:57.107 回答