ruby on rails كيفية فك ملف في روبي على القضبان؟




ruby-on-rails file (3)

استخراج ملفات مضغوطة في روبي

بمجرد تثبيت جوهرة rubyzip ، يمكنك استخدام هذه الطريقة لاستخراج ملفات مضغوطة:

require 'zip'

def extract_zip(file, destination)
  FileUtils.mkdir_p(destination)

  Zip::File.open(file) do |zip_file|
    zip_file.each do |f|
      fpath = File.join(destination, f.name)
      zip_file.extract(f, fpath) unless File.exist?(fpath)
    end
  end
end

يمكنك استخدامه مثل هذا:

extract_zip(zip_path, extract_destination)

أنا تحميل ملف إلى الخادم في روبي على القضبان

عادة، هو ملف نصي وحفظه في النموذج كحقل 'ملف' في تقديم أكتيفريكورد مع مجالات أخرى مثل عنوان تقديم .. الخ.

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

كيف يمكنني تحقيق ذلك؟

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


Answer #1

من صفحة مشروع روبيزيب:

واجهة روبيزيب تغيرت !!! لا حاجة للقيام تتطلب "الرمز البريدي / الرمز البريدي" والبادئة الرمز البريدي في أسماء الفئات إزالتها.

لذلك، يجب تحديث رمز المثال من @ بن-لي إلى شيء من هذا القبيل:

require 'zip'

Zip::File.open("my.zip") do |zipfile|
  zipfile.each do |file|
    # do something with file
  end
end

Answer #2

كنت استخدام جوهرة روبيزيب . على وجه التحديد هذا الجزء: https://github.com/rubyzip/rubyzip/blob/master/lib/zip/filesystem.rb

أنه يخلق نظام ملف اصطناعي في الذاكرة يعكس محتويات ملف مضغوط. في ما يلي مثال يستند إلى المثال من المستندات:

Rubyzip interface changed!!! No need to do require "zip/zip" and Zip prefix in class names removed.

require 'zip'

Zip::File.open("my.zip") do |zipfile|
  zipfile.each do |file|
    # do something with file
  end
end

في حالتك، وضعت للتو اسم تمبيل تحميلها حيث my.zip في المثال، ويمكنك حلقة من خلال محتويات والقيام العمليات العادية الخاصة بك عليها.





zip