Webapp2请求应用程序/八位字节流文件上载

时间:2012-11-29 19:12:28

标签: python file-upload content-type webapp2

我正在尝试通过ajax从表单上传文件到s3。我在客户端使用fineuploader http://fineuploader.com/,在服务器端使用webapp2。它在请求中将参数作为qqfile发送,我可以在请求标题中看到图像数据,但我不知道如何在不使用多部分编码的浏览器中将其恢复。

这就是我在带有multipart的标准html表格帖子中的表现。

image = self.request.POST["image"]

这给了我图像名称和图像文件

目前我只能使用

获取图像文件名而不是数据
image = self.request.get_all('image')
[u'image_name.png']

使用POST时,我收到有关内容标题为application / octet-stream

的警告
<NoVars: Not an HTML form submission (Content-Type: application/octet-stream)>

如何在GAE之外的webapp2中实现BlobStoreHandler?

2 个答案:

答案 0 :(得分:0)

您的问题代码对我来说不是很清楚。但你可以用一个例子。

看看尼克约翰逊的这篇文章。他在客户端使用app引擎blobstore和Plupload实现了一个Dropbox服务:http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-Blobstore-API-part-2

答案 1 :(得分:0)

我最终使用了fineuploader http://fineuploader.com/,它将多部分编码的表单发送到我的处理程序端点。

在处理程序内部我可以简单地引用POST,然后将FieldStorage对象读入cStringIO对象。

image = self.request.POST["qqfile"]
imgObj = cStringIO.StringIO(image.file.read())

# Connect to S3...
# create s3 Key 
key = bucket.new_key("%s" % uuid.uuid4());

# guess mimetype for headers
file_mime_type = mimetypes.guess_type(image.filename)
if file_mime_type[0]:
   file_headers = {"Content-Type": "%s" % file_mime_type[0]}
else:
   file_headers = None

key.set_contents_from_string(imgObj.getvalue(), headers=file_headers)

key_str = key.key

#return JSON response with key and append to s3 url on front end.

注意:qqfile是fineuploader使用的参数。

我正在伪造进度但是我的用例没问题,不需要BlobStoreUploadHandler。