Вместо использования BlobstoreUploadHandler
, поставляемого в AppEngine, я бы предпочел использовать представление Django, чтобы я мог хранить все URL и функции просмотра вместе.Однако я не могу узнать, как получить blob-key
загруженного файла!(как get_uploads () делает для обработчика загрузки).Я видел, что BlobstoreUploadHandler
использует request.params , но я не думаю, что это доступно из 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
Я обнаружил, что некоторую информацию можно извлечь с помощью запроса.FILES, что дает:
<MultiValueDict: {u'file': [<InMemoryUploadedFile: my_file (message/external-body)>]}>
Тем не менее, я предполагаю, что хранилище BLOB-объектов по-прежнему обрабатывает содержимое файла (поэтому оно говорит "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 просто теряется, когда не используется инфраструктура webapp, так как объект UploadedFile не имеет метода key ().