سؤال

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

لذلك، يتيح المشي من خلال هذا. المستخدم المستخدم ملفات ملف إلى تطبيق القضبان الخاص بي. في جهاز التحكم الخاص بي، يتلقى الملف من Params [: file]. ثم أريد أن اجتاز الأمر [: file] لأسفل إلى الباندا باستخدام RestClient.

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

 ~ Started request handling: Wed Aug 12 18:05:15 +0000 2009
 ~ Params: {"format"=>"html", "multipart"=>"true", "account_key"=>"SECURE_KEY", "action"=>"upload", "id"=>"SECURE_ID", "controller"=>"videos", "file"=>"#<File:0xcf02ca4>"}
 ~ 9bfb1750-6998-012c-4509-12313900b0f6: (500 returned to client) InternalServerErrorcan't convert nil into String
/var/local/www/panda/app/models/video.rb:246:in `extname'
/var/local/www/panda/app/models/video.rb:246:in `initial_processing'
/var/local/www/panda/app/controllers/videos.rb:79:in `upload'
هل كانت مفيدة؟

المحلول

أشك في أنك يمكن أن تمر حقا تحميل حمولة على طراز CGI من القضبان في RestClient ونتوقع أن تعمل.

سيكون لتحميل منتظم في القضبان بعض السمات الإضافية التي لا تنتمي إلى مورد منشور (مثل اسم الملف الأصلي وما إلى ذلك)، يحتوي تحميل القضبان على IO مع بيانات الملف الفعلية. قد يكون أيضا كائن تحميل الملفات في القضبان مقبض tempfile وقد يكون Stringio - اعتمادا على حجم التحميل.

ما تحتاجه بشكل فعال للقيام به هو "إعادة تعيين" التحميل الخاص بك لعميل الراحة للتعامل معها بشكل صحيح، وتمرير كائن tempfile مع إعادة التعبئة وإعادة لفه لاسترداد. ربما يمكنك الابتعاد عن مجرد اختيار كائن التحميل نفسه بدلا من المعالم الكاملة [: file

نصائح أخرى

تأكد من أن إجراء RESTCLIAT الخاص بك يمكن أن يوفر أولا محليا. إذا كان الإجراء لا يمكن أن ينقذ محليا، فسيكون لديك فكرة أفضل من أين تنظر أثناء إطلاق النار.

يبدو أن المشكلة تتمثل في نشر الملف الخاص بالملف من الراحة، تحقق من طريقة بديلة للنشر مثل CURB.

الكثير من الأمثلة لنشر بيانات نموذج متعددة الأجزاء على هذا السؤال: Ruby: كيفية نشر ملف عبر HTTP كبيانات متعددة الأجزاء / النموذج؟

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