【发布时间】:2012-02-11 12:07:17
【问题描述】:
我更喜欢使用 Django 视图,而不是使用 AppEngine 中提供的 BlobstoreUploadHandler,这样我可以将所有 url 和视图函数放在一起。但是,我不知道如何获取上传文件的blob-key! (就像get_uploads() 为上传处理程序所做的那样)。我看到BlobstoreUploadHandler 使用request.params,但我认为Django 的Request 没有。
def upload_form(request):
upload_url = blobstore.create_upload_url(reverse(upload_blob))
output = '<html><body>'
output += '<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
output += ('''Upload File: <input type="file" name="file"><br> <input type="submit"
name="submit" value="Submit"> </form></body></html>''')
def upload_blob(request):
print request
# How to get the 'blob-key' from request?!
当我检查请求对象时,我得到的只是
<WSGIRequest
GET:<QueryDict: {}>,
POST:<QueryDict: {u'submit': [u'Submit']}>
# And COOKIES, META, etcetera
编辑:Request.FILES
我发现可以使用 Request.FILES 提取一些信息,它给出:
<MultiValueDict: {u'file': [<InMemoryUploadedFile: my_file (message/external-body)>]}>
但是,我假设 blobstore 仍然处理文件内容(这就是它说“content_type=message/external-body”的原因吗?),所以我仍然需要密钥。调用read() 会得到:
Content-Type: application/octet-stream
MIME-Version: 1.0
Content-Length: 17
Content-MD5: ZmQ3OTJhNjMzNGE0OTAzNGU4NjE5MDNmMGEwNjliMGE=
content-type: application/octet-stream
content-disposition: form-data; name="file"; filename="a1_blob"
X-AppEngine-Upload-Creation: 2012-02-12 22:11:49.643751
所以看起来 AppEngine 实际上用这个描述符替换了文件内容,但是 AppEngine 将密钥放在哪里?
我开始怀疑 blob-key 只是在不使用 webapp 框架时丢失了,因为 UploadedFile 对象没有 key() 方法。
【问题讨论】: