سؤال

في Cherrypy.lib.static.py هناك طريقة:

  serve_file(path, content_type=None, disposition=None, name=None)

حيث يجب أن تكون الوسيطة "المسار" ملف حقيقي (المسار المطلق). هل هناك شيء مشابه لخدمة أي كائن ملف Python؟

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

المحلول

من الدراسة http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py. أود أن أقول، لا: serve_file وظيفة هي "غاضبة"، وهل بنفسها bodyfile = open(path, 'rb'), ولا يبدو أن هناك أي طريقة بديلة. شفقة، كما سيكون من السهل إعادة تكوين وظيفة وإضافة آخر على سبيل المثال serve_open_file لتغطية قضيتك، تناول كل من المندوب إلى وظيفة داخلية من المنطق "الصعب" مثل خدمة متعددة الأجزاء متعددة الأوانيات. قد يكون يستحق من حين أن فتح طلب ميزة ("تذكرة التحسين") على Cherrypy.org - قد لا يكون ميزة قاتلة ولكن يمكنني رؤية حالات الاستخدام، وتنفيذها لن يكون من الصعب على شعب الكرز (زيارة) موقعهم واتبع الإرشادات الموجودة في الصفحة إلى "تسجيل الدخول" إلى ذلك).

نصائح أخرى

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

تحديث:

لخدمتها كتحميل، قم بتعيين رؤوس نوع المحتوى والتصرف المحتوى مثل:

cherrypy.response.headers["Content-Type"] = "application/x-download"
cd = 'attachment; filename="%s"' % name
cherrypy.response.headers["Content-Disposition"] = cd

أو، استخدم serve_fileobj وظيفة في الإصدارات الأخيرة من cherrypy/lib/static.py, ، وهذا يفعل هذا من أجلك وأكثر من ذلك.

أخذ نظرة جديدة على http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py., ، يبدو serve_fileobj هل بالضبط ما تريد.

تحرير: لقد جربت هذا الآن، وهذا فقط يجعل محتويات الملفات فقط على الشاشة، بدلا من السماح بتنزيل الملف.

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