سؤال

أنا أبحث عن طريقة لتنزيل ملف 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 أعلاه لمزيد من المعلومات.

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