使用BlobstoreService和ImageService上传/提供从HTML5画布中提取的图像

时间:2010-09-19 20:54:27

标签: java javascript ajax google-app-engine blobstore

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

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

  1. Paintweb.js库发送XMLHttpRequest POST

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

  3. 自定义servlet为数据存储区中的Blob提供服务 ContentType(“image / png”)如果我可以使用新的BlobstoreService和ImageService,我很好奇 上传我的HTML5画布图像并将其作为纯Blob提供的功能(如本教程中所示GWT BlobstoreService and ImageService

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

     <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的存储/服务。

1 个答案:

答案 0 :(得分:2)

这里你最好的选择是使用XMLHTTPRequest,其中包含创建的图像的multipart / form-data编码体。可以构建它以匹配blobstore期望的内容。遵循的程序将是这样的:

  1. 调用返回新blobstore上传网址的JSON API
  2. 构建一条MIME消息,其中包含图像数据作为一个部分,以及您要包含的任何其他字段。
  3. 使用XMLHTTPRequest将表单上传到blobstore。
  4. 为了做到这一点,你需要自己构建mime消息,或找到一个Javascript库来为你完成。