2013-09-03 8 views
17

के साथ फ़ाइलों को अपलोड करने के लिए मैं AJAX के साथ फ़ाइलों को अपलोड करना चाहता हूं। अतीत में मैंने जादुई jQuery form plugin का उपयोग करके इसे पूरा किया और यह बहुत अच्छा काम किया। वर्तमान में मैं एक रेल ऐप बना रहा हूं और चीजें "रेल मार्ग" करने की कोशिश कर रहा हूं, इसलिए मैं फॉर्म संलग्नक जोड़ने के लिए फॉर्म हेल्पर और पेपरक्लिप मणि का उपयोग कर रहा हूं।रेल 4: AJAX

rails docs चेतावनी दी है कि फार्म हेल्पर AJAX फ़ाइल अपलोड करने के लिए काम नहीं करता: सच:

एक अतुल्यकालिक फ़ाइल अपलोड प्रपत्र बनाने अन्य रूपों के विपरीत दूरदराज के साथ form_for प्रदान करने के रूप के रूप में सरल नहीं है। एक अजाक्स फॉर्म के साथ ब्राउज़र के अंदर चल रहे जावास्क्रिप्ट द्वारा क्रमशः किया जाता है और जावास्क्रिप्ट आपके हार्ड ड्राइव से फ़ाइलों को नहीं पढ़ सकता है फ़ाइल अपलोड नहीं किया जा सकता है। सबसे आम कामकाज एक अदृश्य आईफ्रेम का उपयोग करना है जो फ़ॉर्म सबमिशन के लिए लक्ष्य के रूप में कार्य करता है।

ऐसा लगता है कि कोई ऑफ-द-शेल्फ समाधान नहीं है। तो मैं सोच रहा हूं कि क्या करने की सबसे बुद्धिमान चीज है। ऐसा लगता है कि मेरे पास कई विकल्प हैं:

  1. फॉर्म सहायक और आईफ्रेम चाल का उपयोग करें।
  2. उपयोग प्रपत्र सहायक + पेपरक्लिप + [कुछ अन्य मणि] (अगर यह रेल की प्रामाणिकता टोकन, आदि के साथ अच्छा खेलेंगे यकीन नहीं) यह कार्यक्षमता है विस्तार करने के लिए प्रपत्र सहायक के बीच + jQuery फार्म प्लगइन लोड फ़ाइल प्रस्तुत करने के लिए AJAX फॉर्म जमा करने की अनुमति देने के लिए।

सभी तीन संभव लगते हैं। मुझे कम से कम # 3, विशेष रूप से [कुछ अन्य मणि] भाग पता है। मुझे दो समान प्रश्न मिले (this और this) जो अपलोडिफ़ी नामक Pic-Upload की एक शाखा का उल्लेख करते हैं लेकिन वे 2 साल पुराने हैं और रेल 2 और 3 से निपटते हैं (और अपलोडिफ़ाई को वर्षों में अपडेट नहीं किया गया है)। तो यह कितना बदल गया है, मुझे लगता है कि यह वास्तव में एक नया सवाल है:

रेल 4 में AJAX के साथ फ़ाइलों को अपलोड करने का सबसे अच्छा तरीका क्या है?

+0

मुझे लगता है कि उद्धरण स्पष्ट रूप से बताता है कि आपने हमेशा "जादुई jQuery फॉर्म प्लगइन का उपयोग करके" क्यों किया;) –

+0

रेल के फॉर्म सहायक के साथ इसका उपयोग करने के सबसे आसान तरीके पर कोई सलाह? मुझे लगता है कि मुझे इसका उपयोग नहीं करना चाहिए: remote => true और बस फॉर्म प्लगइन को काम करने दें। – emersonthis

+0

कि प्लगइन awesome-- सिर्फ यह पता करने की कोशिश की है और एक आकर्षण की तरह काम कर रहा है। जानकारीपूर्ण सवाल :) खुला मुद्दों के – Jay

उत्तर

7

remotipart मणि में देखें: https://github.com/JangoSteve/remotipart - आपको बहुत कम काम के साथ सभी तरह से मिल सकता है!

+3

बहुत सारे के लिए धन्यवाद, मैं विशेष रूप से उन के बारे में पटरियों 4 अनुकूलता – Jay

+0

remotipart रेल 4 – KenB

+0

मैं रेल 4 के साथ remotipart का इस्तेमाल किया है के साथ बस ठीक काम करता है द्वारा बंद डर गया, छवि अपलोड कर ली, लेकिन प्रतिक्रिया अद्यतन। js.erb निष्पादित हो रही नहीं है। plz मदद – Santanu

1

आईएमएचओ रेल AJAX का उपयोग कर अपलोड फ़ाइलों से निपटने के दौरान सही नहीं है, खासकर यदि आप प्रगति पट्टी चाहते हैं। मेरा सुझाव है कि आपने AJAX अनुरोध पर फ़ॉर्म सबमिशन के लिए जावास्क्रिप्ट का उपयोग करना है जैसा आपने सुझाव दिया है (2)। यदि आप जावास्क्रिप्ट के साथ सहज हैं तो आपको कई समस्याएं नहीं होंगी।

मैं हाल ही में इस बहुत ही सरल जे एस पुस्तकालय https://github.com/hayageek/jquery-upload-file उपयोग करके एक ही दृष्टिकोण का इस्तेमाल किया और मैं शीर्षक और विवरण जे एस कोड का पालन तरह लग रहा है के साथ एक फिल्म अपलोड करने के लिए यहाँ http://www.alfredo.motta.name/upload-video-files-with-rails-paperclip-and-jquery-upload-file/

अधिक जानकारी के लिए लिखा था एक फार्म के साथ एक आवेदन के लिए:

$(document).ready(function() { 
    var uploadObj = $("#movie_video").uploadFile({ 
    url: "/movies", 
    multiple: false, 
    fileName: "movie[video]", 
    autoSubmit: false, 
    formData: { 
     "movie[title]": $('#movie_title').text(), 
     "movie[description]": $('#movie_description').text() 
    }, 
    onSuccess:function(files,data,xhr) 
    { 
     window.location.href = data.to; 
    } 
    }); 

    $("#fileUpload").click(function(e) { 
    e.preventDefault(); 
    $.rails.disableFormElements($($.rails.formSubmitSelector)); 
    uploadObj.startUpload(); 
    }); 
}); 

बिल्कुल सही से, लेकिन आपको अपने अग्रभाग पर लचीलापन देता है।