2013-12-11 4 views
1

Мне интересно, что является лучшим способом обработки POSTed необработанных данных на стороне сервера. Поэтому я использую Falconframework и я могу получить пользовательский представленный файлОбработка файла POSTed multipart/form-data

-----------------------------1209846671886287098156775745 
Content-Disposition: form-data; name="qquuid" 

d3ad452e-a287-4cb7-ac1f-f0a5cdb54386 
-----------------------------1209846671886287098156775745 
Content-Disposition: form-data; name="qqfilename" 

Screenshot.png 
-----------------------------1209846671886287098156775745 
Content-Disposition: form-data; name="qqtotalfilesize" 

1951677 
-----------------------------1209846671886287098156775745                       
Content-Disposition: form-data; name="qqfile"; filename="Screenshot.png" 
Content-Type: image/png 

�PNG 
.................lots of bites............ 

Использование питона и, надеюсь, некоторые другие Lib я хотел бы, чтобы превратить его в какой-то объект файла, который я могу извлечь метаданные - имя файла , uuid и т. д., а также сам файл. Какой lib я должен использовать?

+1

это основной материал, который должен быть обеспечен вашим веб-рамочным что-то вроде 'request.files .get ('file-input-name') ' – jfs

+0

@JFSebastian, да, я думал, что я буду довольно простым, но, к сожалению, falconframework пока не реализовано в будущих выпусках. Спасибо за ваш комментарий. – zzart

+1

Вы можете реализовать его самостоятельно, используя 'cgi.FieldStorage', например, см. [' Bottle.py' делает это] (https://github.com/defnull/bottle/blob/master/bottle.py#L1187) – jfs

ответ

1

Вот средний проект, который выглядит многообещающим. Я в настоящее время пытаюсь реализовать это самостоятельно в службе falcon.

falcon-multipart

У меня есть довольно удачи, а также с помощью cgi.FeildStorage(). Как указано в следующем сообщении. cgi article

import cgi 

def on_post(req, resp): 
    env = req.env 
    env.setdefault('QUERY_STRING','') 
    form = cgi.FieldStorage(fp=req.stream,environ=env) 
    form['fileinputname'].file 

Если вы готовы иметь одну не сокол крюка здесь пример с бутылкой: example

+1

Это работает и для меня, и освобождает бремя интеграции промежуточного программного обеспечения третьей стороны в мой API. Кстати, может быть полезно знать, что вы можете вызвать '.read()' для возвращаемого значения 'form ['fileinputname']. File', чтобы получить содержимое в виде байтов. – Dirk