Ich habe dies in einer Rails-Umgebung geschrieben. Es sind nur ungefähr fünf Zeilen JavaScript, wenn Sie das leichtgewichtige jQuery-Formular-Plugin verwenden.
Die Herausforderung liegt darin, das AJAX-Upload zum Laufen zu bringen, da das Standard-remote_form_for
kein multipart form submission versteht. Es wird die Dateidaten, die Rails mit der AJAX-Anfrage zurücksenden möchte, nicht senden.
Dort kommt das jQuery-Formular-Plugin ins Spiel.
Hier ist der Rails-Code dafür:
<% remote_form_for(:image_form,
:url => { :controller => "blogs", :action => :create_asset },
:html => { :method => :post,
:id => 'uploadForm', :multipart => true })
do |f| %>
Laden Sie eine Datei hoch: <%= f.file_field :uploaded_data %>
<% end %>
Hier ist der zugehörige JavaScript-Code:
$('#uploadForm input').change(function(){
$(this).parent().ajaxSubmit({
beforeSubmit: function(a,f,o) {
o.dataType = 'json';
},
complete: function(XMLHttpRequest, textStatus) {
// XMLHttpRequest.responseText wird die URL des hochgeladenen Bildes enthalten.
// Setzen Sie es in ein Bild-Element, das Sie erstellen, oder verwenden Sie es wie Sie möchten.
// Zum Beispiel, wenn Sie ein Bild-Element mit der ID "my_image" haben, dann
// $('#my_image').attr('src', XMLHttpRequest.responseText);
// Wird dieses Bild-Tag dazu bringen, das hochgeladene Bild anzuzeigen.
},
});
});
Und hier ist die Rails-Controller-Aktion, ziemlich einfach:
@image = Image.new(params[:image_form])
@image.save
render :text => @image.public_filename
Ich habe dies in den letzten Wochen mit Bloggity verwendet, und es hat wie ein champ funktioniert.
0 Stimmen
Es gibt verschiedene fertige Plugins zum Hochladen von Dateien für jQuery. Das Durchführen solcher Upload-Hacks ist keine angenehme Erfahrung, daher verwenden die Leute lieber fertige Lösungen. Hier sind einige: - JQuery File Uploader - Mehrere Datei-Upload-Plugin - Mini Mehrfachdatei-Upload - jQuery-Datei-Upload Sie können nach weiteren Projekten auf NPM (unter Verwendung des Schlüsselworts "jquery-plugin") oder auf Github suchen.
78 Stimmen
Du erhältst nur den Dateinamen, weil deine Variable Dateiname den Wert von $('#file') erhält, nicht die Datei, die im Eingabefeld liegt
0 Stimmen
Ich bin auf einige wirklich leistungsstarke jQuery-basierte Datei-Upload-Bibliotheken gestoßen. Schau sie dir an: 1. Plupload - Dokumentation: plupload.com/docs 2. jQuery File Upload - Dokumentation: github.com/blueimp/jQuery-File-Upload 3. FineUploader - Dokumentation: docs.fineuploader.com
22 Stimmen
Hier ist einer: http://blueimp.github.io/jQuery-File-Upload/ - HTML5 Ajax-Upload - Eleganter Ausweichmodus auf iFrames für nicht unterstützte Browser - Mehrfachdatei-Async-Upload Wir haben es verwendet und es funktioniert großartig. (Hier finden Sie die Dokumentation)
3 Stimmen
Überprüfen Sie auch dies: stackoverflow.com/questions/6974684/…, hier wird erklärt, wie man es über jQuery erreichen kann.
2 Stimmen
@Jimmy Wie würde er die Datei erhalten, die im Eingabefeld liegt?
0 Stimmen
@Sergio haben dir keine der 34 Antworten geholfen? Wenn ja, dann schätze es bitte und markiere es als akzeptiert.