استيراد البيانات القديمة مع القضبان والأوراق

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

  •  16-09-2019
  •  | 
  •  

سؤال

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

هل هناك طريقة صحيحة للقيام بذلك؟ يبدو وكأنه شيء يجب أن يكون سهلا إلى حد ما.

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

المحلول

أعلم أنني فعلت نفس الشيء، وأعتقد أنني قمت فقط بإنشاء كائن ملف من المسار إلى كل ملف، ويعينه لسمة الصورة. سيتم تشغيل PaperClip على هذا الملف:

thing.image = File.new("/path/to/file.png")
thing.save

نصائح أخرى

هذا يعمل بشكل رائع للملفات المحلية ولكنه لا يعمل أيضا للملفات البعيدة. لدي تطبيق يستخدم PaperClip لتحميل الصور. يتم تخزين هذه الصور على Amazon S3. على أي حال، كان لدي بعض البيانات القديمة التي كنت بحاجة للاستيراد حتى جربت ما يلي:

thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save

إذا كان الملف صغيرا (قل، أقل من 10K) ثم إرجاع OpenURI كائن Stringio وسيتم تخزين ملفي على S3 As Stringio.txt

إذا كان الملف أكبر من 10K، فستظهر OpenURI كائن Tempfile. لكن اسم الملف على S3 ينتهي كونه فريدا، ولكن ليس حقا فيما يتعلق بأبطال اسم Image.jpg الأصلي

كنت قادرا على حل المشكلة عن طريق القيام بما يلي:

remote_photo = open('http://www.someurl.com/path/to/image.jpg')
def remote_photo.original_filename;base_uri.path.split('/').last; end   
thing.image = remote_photo
thing.save
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top