يمكن cherrypy مرسلة متعددة / مختلطة من خارج منطقة الجزاء؟

StackOverflow https://stackoverflow.com/questions/415019

  •  03-07-2019
  •  | 
  •  

سؤال

ونحن تلقي بعض البيانات منصب أكس + الملفات الثنائية التعسفية (مثل الصور والصوت) من جهاز يعطينا فقط متعدد الأجزاء / ترميز مختلطة.

ولقد إعداد cherrypy تحميل / وظيفة معالج نهاية الاستقبال لدينا. لقد تمكنت لتمكينه من القيام عدد التعسفي من المعلمات باستخدام متعددة الأجزاء / شكل بيانات. ولكن عندما نحاول إرسال البيانات متعددة مختلط، ونحن لا تحصل على أية معالجة.

@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...

وهكذا، عند تقديم متعددة الأجزاء / شكل بيانات، يتم تعريف وسائط وkwargs جيدا.
وسائط هي حقول النموذج، kwargs = تجزئة فار والقيم. عندما أقدم متعددة الأجزاء / مختلط، وسائط وkwargs فارغة، وليس لدي سوى cherrypy.request.rfile لأن المعلومات ظيفة الخام.

وسؤالي هو، هل cherrypy لديها المدمج في المعالج لمعالجة متعدد الأجزاء / مختلط والمقسم الترميز لوظيفة؟ أو أنني سوف تحتاج إلى تجاوز cherrypy.tools.process_request_body ولفة بلدي فك بك؟

ويبدو أن خادم WSGI مدمج مع cherrypy يعالج هذا كجزء من HTTP / 1.1 المواصفات، ولكن أنا لم يتمكن من العثور على وثائق في cherrypy في الحصول على هذه الوظيفة.


... لتوضيح

وأنا باستخدام أحدث نسخة 3.1.1 أو نحو ذلك من Cherrypy.

وجعل نموذج افتراضي ينطوي على مجرد جعل المعلمات في وظيفة تحميل.

لو/ شكل بيانات متعددة الأجزاء، لقد تم استدعاء حليقة -F param1=@file1.jpg -F PARAM2 = sometext -F param3=@file3.wav <لأ href = "HTTP: // المقصد: ميناء / تحميل "يختلط =" نوفولو noreferrer "> HTTP: // المقصد: ميناء / تحميل

في هذا المثال، وأحصل على:

args = ['param1','param2','param3] 
kwargs = {'param1':CString<>, 'param2': 'sometext', 'param3':CString<>}

عند محاولة تقديم متعددة الأجزاء / مختلط، حاولت النظر إلى request.body، لكنها أبقت على الحصول على شيء لذلك، بغض النظر عن وضع معالجة الجسم.

ومدخلات نحن نحصل يأتي في كما يلي:

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>

ولقد حصلت على الشك يتسلل أن متعدد الأجزاء / مختلط هي المشكلة التي cherrypy هو مجرد اعطاء لي فقط rfile. هدفنا هو أن تكون عملية cherrypy الجسم إلى أجزاء مع معالجة الحد الأدنى على الجانب تلقي (أي السماح cherrypy تفعل سحرها). إذا كان ذلك يتطلب منا أن يكون أكثر صرامة على تنسيق إرسال ليكون نوع المحتوى الذي cherrypy أمثال، فليكن. ما هي صيغ مقبولة؟ هو فقط متعدد الأجزاء / شكل البيانات؟

هل كانت مفيدة؟

المحلول

وبلدي سيئة. كلما نوع المحتوى من نوع "متعدد الأجزاء / *"، ثم CP يحاول التمسك المحتويات في request.params (إن وجدت الآخرين نوع المحتوى، فإنه يذهب إلى request.body).

ومما يؤسف له أن تولى CP أن أي رسالة متعددة هي بيانات النموذج، ويتم تكوين مخصص لأنواع فرعية أخرى. لقد حددت فقط هذا في الجذع، وينبغي الإفراج عنه في 3.1.2. آسف للإزعاج. وعلى المدى القصير، يمكنك محاولة تطبيق changeset محليا؛ يمكنك الاطلاع على http://www.cherrypy.org/ticket/890 .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top