django - 使用 Django View 处理 blobstore 上传

标签 django google-app-engine

我更愿意使用 Django View ,而不是使用 AppEngine 中提供的 BlobstoreUploadHandler,这样我就可以将所有网址和 View 函数放在一起。但是,我不知道如何获取上传文件的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

编辑:请求.FILES

我发现可以使用 Request.FILES 提取一些信息,它给出:

<MultiValueDict: {u'file': [<InMemoryUploadedFile: my_file (message/external-body)>]}>

但是,我假设 blobstore 仍然处理文件内容(这就是为什么它说“content_type=message/external-body”?),所以我仍然需要 key 。调用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 将 key 放在哪里?

我开始怀疑在不使用 webapp 框架时 blob-key 会丢失,因为 UploadedFile 对象没有 key() 方法。

最佳答案

我花了很长时间才找到,但是content_type: message/external-body需要额外的参数,才能找到实际文件,在AppEngine的情况下,这个是blob-key。然而,Django不支持这些额外的content_type参数,所以它们确实在这个过程中丢失了。似乎有补丁,但我认为 AppEngine Django 版本中还没有。

https://code.djangoproject.com/ticket/13721

关于django - 使用 Django View 处理 blobstore 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240080/

相关文章:

python - 当我刷新页面时,我的自定义 Django CMS 插件的子插件变得无效

django - 如何在 Django REST Framework Mongoengine 中序列化 EmbeddedDocumentListField?

python - 如何允许按外键字段排序?

java - Google 搜索引擎仅返回 10 个结果

java - 如何将应用程序部署到谷歌应用程序引擎中

python - 如何使用谷歌应用引擎更新数据存储中的列名

python - Django:如何过滤属于特定组的用户

python - 更改继承字段的属性

java - 如何为包含Key字段的子实体创建唯一ID?

java - 如何使用java在应用程序引擎中使用文件名将文件存储为blob?