855 Stimmen

jQuery Ajax Datei-Upload

Kann ich den folgenden jQuery-Code verwenden, um Datei-Upload mit POST-Methode einer Ajax-Anfrage durchzuführen?

$.ajax({
    type: "POST",
    timeout: 50000,
    url: url,
    data: dataString,
    success: function (data) {
        alert('success');
        return false;
    }
});

Wenn dies möglich ist, muss ich dann die data Teil? Ist das der richtige Weg? Ich POSTe die Datei nur an die Serverseite.

Ich habe herumgegoogelt, aber was ich gefunden habe, war ein Plugin, während ich es in meinem Plan nicht verwenden möchte. Zumindest für den Moment.

0 Stimmen

Ajax unterstützt keine Datei-Uploads, Sie sollten stattdessen iframe verwenden

1 Stimmen

2 Stimmen

6voto

Quy Le Punkte 2284

Sie können die Methode ajaxSubmit wie folgt verwenden:) wenn Sie eine Datei auswählen, die auf den Server hochgeladen werden muss, wird das Formular an den Server übermittelt :)

$(document).ready(function () {
    var options = {
    target: '#output',   // target element(s) to be updated with server response
    timeout: 30000,
    error: function (jqXHR, textStatus) {
            $('#output').html('have any error');
            return false;
        }
    },
    success: afterSuccess,  // post-submit callback
    resetForm: true
            // reset the form after successful submit
};

$('#idOfInputFile').on('change', function () {
    $('#idOfForm').ajaxSubmit(options);
    // always return false to prevent standard browser submit and page navigation
    return false;
});
});

2 Stimmen

Ich glaube, Sie sprechen von jquery Formular Plugin. Es ist wirklich die beste Option hier, abgesehen von dem Mangel an Details in Ihrer Antwort.

0 Stimmen

@fotanus Sie haben Recht! Das Skript muss jquery form plugin verwenden, um die Methode ajaxSubmit zu verwenden, die im jquery form plugin definiert ist.

5voto

Nikunj K. Punkte 8071

Wenn Sie eine Datei mit AJAX hochladen möchten, finden Sie hier einen Code, den Sie für das Hochladen von Dateien verwenden können.

$(document).ready(function() {
    var options = { 
                beforeSubmit:  showRequest,
        success:       showResponse,
        dataType: 'json' 
        }; 
    $('body').delegate('#image','change', function(){
        $('#upload').ajaxForm(options).submit();        
    }); 
});     
function showRequest(formData, jqForm, options) { 
    $("#validation-errors").hide().empty();
    $("#output").css('display','none');
    return true; 
} 
function showResponse(response, statusText, xhr, $form)  { 
    if(response.success == false)
    {
        var arr = response.errors;
        $.each(arr, function(index, value)
        {
            if (value.length != 0)
            {
                $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
            }
        });
        $("#validation-errors").show();
    } else {
         $("#output").html("<img src='"+response.file+"' />");
         $("#output").css('display','block');
    }
}

Hier ist der HTML-Code zum Hochladen der Datei

<form class="form-horizontal" id="upload" enctype="multipart/form-data" method="post" action="upload/image'" autocomplete="off">
    <input type="file" name="image" id="image" /> 
</form>

4voto

Jayesh Paunikar Punkte 148
var dataform = new FormData($("#myform")[0]);
//console.log(dataform);
$.ajax({
    url: 'url',
    type: 'POST',
    data: dataform,
    async: false,
    success: function(res) {
        response data;
    },
    cache: false,
    contentType: false,
    processData: false
});

6 Stimmen

Sie können Ihre Antwort verbessern, indem Sie einige Details hinzufügen

4voto

Abhishek Kanrar Punkte 312
<input class="form-control cu-b-border" type="file" id="formFile">
<img id="myImg" src="#">

In js

<script>
    var formData = new FormData();
    formData.append('file', $('#formFile')[0].files[0]);
    $.ajax({
        type: "POST",
        url: '/GetData/UploadImage',
        data: formData,
        processData: false, // tell jQuery not to process the data
        contentType: false, // tell jQuery not to set contentType
        success: function (data) {
            console.log(data);
            $('#myImg').attr('src', data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
        }
    })
</script>

In Controller

public ActionResult UploadImage(HttpPostedFileBase file)
        {
            string filePath = "";
            if (file != null)
            {
                string path = "/uploads/Temp/";
                if (!Directory.Exists(Server.MapPath("~" + path)))
                {
                    Directory.CreateDirectory(Server.MapPath("~" + path));
                }
                filePath = FileUpload.SaveUploadedFile(file, path);
            }

            return Json(filePath, JsonRequestBehavior.AllowGet);
        }

3voto

Fallenreaper Punkte 9374

Hier eine Idee, die ich mir überlegt habe:

Have an iframe on page and have a referencer.

Sie haben ein Formular, in das Sie das Element Eingabedatei verschieben.

Form:  A processing page AND a target of the FRAME.

Das Ergebnis wird in den iframe übertragen, und dann können Sie die abgerufenen Daten einfach eine Ebene höher an das gewünschte Bild-Tag senden, z. B. mit:

data:image/png;base64,asdfasdfasdfasdfa

und die Seite wird geladen.

Ich glaube, dass es bei mir funktioniert, und je nachdem können Sie vielleicht etwas Ähnliches tun:

.aftersubmit(function(){
    stopPropagation(); // or some other code which would prevent a refresh.
});

0 Stimmen

Ich sehe nicht, wie dies eine andere Antwort, die zuvor gegeben wurde, verbessern soll. Außerdem ist es Ausbreitung keine Propagierung! ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X