如何将filepicker.io与google app engine(blobstore)集成?

时间:2012-08-27 20:41:11

标签: google-app-engine google-cloud-datastore blobstore webapp2 filepicker.io

所以我正在尝试将filepicker.io与GAE应用程序一起使用。 filepicker小部件返回用户上传的文件的URL。

如何使用此网址将文件上传到GAE的blobstore?

blobstore仅支持“通过表单上传文件”,所以真正的问题是如何伪造包含文件URL的表单POST。

3 个答案:

答案 0 :(得分:4)

伪造表格帖子是可能的,但使用Files API

更简单

编辑:

要将文件API与urlfetch一起使用,您可以编写如下内容:

from __future__ import with_statement
from google.appengine.api import files
from google.appengine.api import urlfetch

url = "http://www.facebook.com/somephoto.png"
result = urlfetch.fetch(url)
if result.status_code not 200:
  return "some error"

# Create the file
file_name = files.blobstore.create(mime_type='application/octet-stream')

# Open the file and write to it
with files.open(file_name, 'a') as f:
  f.write(result.content)

# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)

# Get the file's blob key
blob_key = files.blobstore.get_blob_key(file_name)

我没有对此进行测试 - 如果这不起作用,请告诉我。

另外,我相信您可以将mime_type保留为'application / octet-stream',App Engine将尝试猜测正确的类型。如果这不起作用,请尝试将其更改为“image / png”。或者对于pdf,mime类型将是'application / pdf'

答案 1 :(得分:1)

最高投票答案中的文件API已被弃用,因此我写了一个要点来解决github上的这个问题。它需要图像的URL并使用请求和海报将其发布到您自己的服务器。

https://gist.github.com/jmasonherr/6301914

答案 2 :(得分:0)

我们实际上花了很多时间试图找到我们是否可以破解浏览器以伪造你描述的确切类型,但无济于事。我的建议是编写一些快速的后端代码,比如Kyle建议从网址中获取文件对象,但如果你真的很执着,你实际上可以使用ajax伪造自己的多部分表单请求。

有关如何执行此操作的一些建议,请参阅XMLHttpRequest POST multipart/form-dataIs it possible to fake a multipart/form-data post with a jquery ajax call?