إنشاء الصور الديناميكية مع WSGI، أية ملفات تشارك

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأود أن ترسل الصور التي تم إنشاؤها حيوي للمستخدمين بلدي، مثل الخرائط والرسوم البيانية وما إلى ذلك "رمي بعيدا" الصور، وسوف يتم إرسال هذه الصور فقط لمستخدم واحد ومن ثم تدميرها، وبالتالي "لا تشارك الملفات ".

وأود أن ترسل صورة مباشرة للمستخدم، دون حفظه على نظام الملفات أولا. مع PHP هذا يمكن تحقيقه من خلال ربط صورة في ملفات HTML لنصي PHP مثل:

وتحرير: ابتلع SO بلدي علامة صورة:

<img src="someScript.php?param1=xyz">

وبعد ذلك أرسل النصي رؤوس الصحيحة (نوع الملف => الحياة السياسية في فرنسا وغيرها) إلى المتصفح وكتب مباشرة الصورة مرة أخرى إلى العميل، دون حفظه مؤقتا إلى نظام الملفات.

وكيف يمكن أن أفعل شيئا من هذا القبيل مع تطبيق WSGI. حاليا أنا أستخدم SimpleWSGI Server داخلي بايثون. وأنا أدرك أن هذا الخادم كان من المفترض أساسا لأغراض العرض التوضيحي وليس للاستخدام الفعلي، كما أنها تفتقر إلى قدرات خيوط متعددة، لذا يرجى لا أشير إلى هذه النقطة بالنسبة لي، وأنا على علم بذلك، والآن فإنه يفي متطلبات بلدي: )

هل هو حقا بسيطة مثل وضع URL إلى العلامات صورة والتعامل مع الطلب مع WSGI، أو أن هناك ممارسة أفضل؟

كان

وقد أي شخص أي خبرة مع هذا ويمكن أن تعطيني بعض المؤشرات (أي تلك 32Bit فقط من فضلك)

شكرا،

وتوم

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

المحلول

لا علاقة لها WSGI أو PHP أو أي تكنولوجيا أخرى على الإنترنت محددة. النظر

<img src="someScript.php?param1=xyz">

وبشكل عام لخادم رابط someScript.php?param1=xyz يجب أن تعود البيانات من نوع الصورة وانها ستعمل

وجرب هذا المثال:

from wsgiref.simple_server import make_server

def serveImage(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'image/png')]
    start_response(status, headers)

    return open("about.png", "rb").read()

httpd = make_server('', 8000, serveImage)
httpd.serve_forever()

وهنا فإن أي رابط لافتا إلى serveImage إرجاع صورة صالحة ويمكنك استخدامه في أي سمة img أو أي مكان آخر بطاقة فيها صورة يمكن استخدامها على سبيل المثال المغلق أو صور الخلفية

يمكن أن تتولد

وبيانات الصورة على الطاير باستخدام العديد من المكتبات طرف ثالث مثل PIL الخ نرى منها مثلا أمثلة على توليد الصور حيوي باستخدام مكتبة الثعبان التصوير http://lost-theory.org/python/dynamicimg.html

نصائح أخرى

وYES. وهو بسيط مثل وضع رابط في الصفحة.

<img src="url_to_my_application">

وطلبك فقط لإعادته مع MIMETYPE الصحيح، تماما مثل على PHP أو أي شيء آخر. أبسط مثال ممكن:

def application(environ, start_response):
    data = open('test.jpg', 'rb').read() # simulate entire image on memory
    start_response('200 OK', [('content-type': 'image/jpeg'), 
                              ('content-length', str(len(data)))])
    return [data]

وبطبيعة الحال، إذا كنت تستخدم مكتبة الإطار / المساعد، قد يكون لها وظائف المساعد التي سوف تجعل من الأسهل بالنسبة لك.

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

إذا كان لديك حلقة الحدث متطورة أن يحول بين طلبات مختلفة، وكتابة التعليمات البرمجية معالجة الطلب بطريقة صديقة للثردلس (عن طريق إعادة التحكم إلى الخادم كلما كان ذلك ممكنا)، يمكنك الحصول حتى <م > أفضل الأداء من استخدام المواضيع، لأنها لا تجعل أي شيء تعمل بشكل أسرع وإضافة النفقات العامة.

twisted.web للحصول على تطبيق الخادم بيثون الويب الجيدة التي لا تستخدم المواضيع .

لمثال يتوهم أن يستخدم هذه التقنية، يرجى الاطلاع السكك الحديدية BNF الرسم البياني النفحة مصغرة عرض . يمكنك الحصول على مصدر من نفحة WSGI أدوات تنزيل.

ويجب النظر في استخدام والالتفات الى رؤوس ETAG. انها النصي CGI، وليس WSGI، ولكن الأفكار للترجمة: خطوط المؤشرات مصدر - هو يحدث في العودة دائما نفس الصورة لنفس المعايير، لذلك يمارس التخزين المؤقت المدقع.

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