Send_file يرسل ملفًا فارغًا فقط
-
27-09-2019 - |
سؤال
أنا أبحث عن طريقة لتنزيل ملف XML. أنا أستعمل:
file_path = 'folder/' + xml_name + '.xml'
send_file file_path, :type => "text/xml"
لكن هذا دائمًا ما يقوم بتنزيل ملف فارغ. يحتوي الملف نفسه على 16 كيلو بايت من البيانات ...
لماذا هذا؟
ميشي
المحلول 2
تم حفظ المشكلة ، لكنني لا أعرف لماذا
File.open(file_path, 'r') do |f|
send_data f.read, :type => "text/xml", :filename => "10.xml"
end
Send_data يعمل ... ولكن Send_file لا!
نصائح أخرى
ربما عليك التعليق
config.action_dispatch.x_sendfile_header = "X-Sendfile"
في الإنتاج
نرى http://vijaydev.wordpress.com/2010/12/15/rails-3-and-apache-x-sendfile/ للتفسيرات
كما يقول يوجين في إجابته ، في الإنتاج ، سوف يسمح القضبان enviroment Apache أو Nginx بإرسال الملف الفعلي لك مع X-Sendfile ، إذا لم تستخدم أيًا من هذه البنية التحتية للقضبان ، يجب عليك التعليق على الخط المقترح في ال
التكوين/البيئات/ملف production.rb.
# config.action_dispatch.x_sendfile_header = "X-Sendfile"
يجب عليك تمكين استخدام sendfile في ./config/environments/production.rb
:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
إذا لم يكن هذا السطر موجودًا (أو تم التعليق عليه) ، فسيقوم Rails بإرسال الملف بشكل صحيح ، ولكن ليس من خلال Apache.
إذا كنت تحصل على ملفات 0 بايت ، فتأكد من تثبيتها mod_xsendfile
, ، وهو متاح من https://tn123.org/mod_xsendfile
قم بتنزيل الملف المصدر الفردي (mod_xsendfile.c
) وتجميعها (apxs -cia mod_xsendfile.c
). ربما تريد الجري apxs
كجذر بحيث يقوم بإعداد كل شيء بشكل صحيح.
ثم تريد ضبط XSendFile
و XSendFilePath
الخيارات في ملفات تكوين Apache الخاصة بك. انظر المساعدة في عنوان URL أعلاه لمزيد من المعلومات.