Otrzymujemy dane POST z xml + dowolnych plików binarnych (takich jak obrazy i dźwięki) z urządzenia, które daje nam tylko kodowanie wieloczęściowe/mieszane.Czy cherrypy może odbierać wielostronicowe/mieszane testy POST po wyjęciu z pudełka?
Przygotowałem handlerka cherry/POST dla naszego odbiornika. Udało mi się zezwolić na wykonywanie dowolnej liczby parametrów przy użyciu wieloczęściowych/formularzy danych. Jednak gdy próbujemy wysłać dane wieloczęściowe, nie otrzymujemy żadnego przetwarzania.
@cherrypy.expose
def upload(self, *args,**kwargs):
"""upload adapted from cherrypy tutorials
We use our variation of cgi.FieldStorage to parse the MIME
encoded HTML form data containing the file."""
print args
print kwargs
cherrypy.response.timeout = 1300
lcHDRS = {}
for key, val in cherrypy.request.headers.iteritems():
lcHDRS[key.lower()] = val
incomingBytes = int(lcHDRS['content-length'])
print cherrypy.request.rfile
#etc..etc...
Podczas przesyłania danych wieloczęściowych/formularzy, wartości args i kwargs są dobrze zdefiniowane.
args są polami formularza, kwargs = hash vars i wartości. Po przesłaniu wieloczęściowego/mieszanego, args i kwargs są puste, a ja po prostu mam cherrypy.request.rfile jako surową informację POST.
Moje pytanie brzmi, czy cherrypy ma wbudowany moduł obsługi obsługujący kodowanie wieloczęściowe/mieszane i kodowane dla POST? Czy będę musiał zastąpić cherrypy.tools.process_request_body i przetasować własny dekoder?
Wygląda na to, że wbudowany serwer wsgi z cherrypy obsługuje to jako część specyfikacji HTTP/1.1, ale nie mogłem znaleźć dokumentacji w cherrypy w uzyskiwaniu dostępu do tej funkcji.
... wyjaśnienie
Używam najnowszej wersji 3.1.1 lub tak CherryPy.
Tworzenie formularza domyślnego wymaga jedynie wprowadzenia parametrów w funkcji przesyłania.
Dla multipart/form-data, byłem nazywając curl -F [email protected] -F param2 = Jakiś tekst -F [email protected] http://destination:port/upload
W tym przykładzie, mam :
args = ['param1','param2','param3]
kwargs = {'param1':CString<>, 'param2': 'sometext', 'param3':CString<>}
Gdy próbuje przesłać wieloczęściowy/mieszany, próbowałem patrząc na request.body, ale trzymane na coraz Brak za to, niezależnie od ustawienia przetwarzania ciała.
Wejście jesteśmy coraz kapie jak to:
user-agent:UNTRUSTED/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1
content-language:en-US
content-length:565719
mime-version:1.0
content-type:multipart/mixed; boundary='newdivider'
host:192.168.1.1:8180
transfer-encoding:chunked
--newdivider
Content-type: text/xml
<?xml version='1.0' ?><data><Stuff>....
etc...etc...
--newdivider
Content-type: image/jpeg
Content-ID: file://localhost/root1/photos/Garden.jpg
Content-transfer-encoding: binary
<binary data>
Mam podkradające podejrzenie, że wieloczęściowy/mieszany jest problem, że CherryPy jest po prostu daje mi tylko rfile. Naszym celem jest, aby cherrypy przetwarzał ciało na jego części przy minimalnym przetwarzaniu po stronie odbiorczej (tj. Niech wiśnie robią swoją magię). Jeśli to wymaga, abyśmy byli ostrzejsi w formacie wysyłania, aby być typem treści, który lubi wisielec, to niech tak będzie. Jakie są akceptowane formaty? Czy to tylko wieloczęściowe/formularzy danych?
jakiej wersji cherrypy i czy można utworzyć przykładowy formularz HTML? – llimllib
Zamiast rfile, spójrz na cherrypy.request.body, gdy Content-Type nie jest formą danych. – fumanchu