2017-02-28 3 views
1

Ich habe ein Problem mit einem Bild-Uploader, den ich in ASP mache. Ich möchte ein Bild mit Ajax in den Projektordner hochladen.Ajax Bild Uploader Ausgabe

meine html und js:

<form id="form1" runat="server"> 
    <div> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
     <br /> 
     <br /> 
    <a href="#" id="btnImg" onclick="uploadImg()" runat="server">UPLOAD</a> 
    </div> 
    </form> 

<script> 
    function uploadImg(){ 
     var formData = new FormData(); 
     formData.append('FileUpload1', $('#btnImg')[0].files[0]); 
     $.ajax({ 
      type: "POST", 
      url: 'Default.aspx/imageUpload', 
      data: formData, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       alert(data); 
      } 
     }); 

    } 
</script> 

mein Bild-Upload-Code (C#):

[WebMethod] 
protected void imageUpload(object sender, EventArgs e) 
{ 
    if (FileUpload1.HasFile) 
    { 
     string fileName = Path.GetFileName(FileUpload1.PostedFile.FileName); 
     Guid _fileNameRandom = Guid.NewGuid(); 
     string _fileNameStr = _fileNameRandom.ToString(); 
     FileUpload1.PostedFile.SaveAs(Server.MapPath("/Images/") + (_fileNameStr + fileName)); 
     Response.Redirect(Request.Url.AbsoluteUri); 
    } 
} 

IN Konsole i die folgenden Fehlermeldungen erhalten: Uncaught Typeerror: kann nicht lesen Eigenschaft '0' von undefined bei uploadImg (Default.aspx: 32) bei HTMLAnchorElement.onclick (Default.aspx: 21)

Leitung 32 in Defau lt.aspx ist:}); des js-Skripts. und Zeile 21 ist: Funktion uploadImg() {

Hoffe jemand kann mir helfen, dies zu lösen.

+1

Diese Zeile ist das Problem: '$ ('# btnImg') [0] .files [0]', obwohl es nicht klar ist, warum genau. Führen Sie diesen Code nach dem Auswählen einer Datei aus? –

+0

Können Sie genauer sein? :) – mheonyae

Antwort

1

$('#btnImg')[0] ist der Schuldige.

$('#btnImg')[0] wird nie eine Dateisammlung haben, denn das ist ein Ankerelement, versuchen Sie es zu ändern $('#FileUpload1')[0], und sehen, ob das funktioniert? Wenn nicht, müssen Sie auf das Element input[type='file'] verweisen, von dem ich denke, dass der ASP-Helfer für Sie mit dieser ID rendern sollte.

+0

wenn ich zu $ ​​ändern ('# FileUpload1') [0] bekomme ich: Uncaught TypeError: Illegaler Aufruf. Können Sie mit der Eingabe [Typ = 'Datei'] genauer sein? Ich bin neu in dieser Abteilung ... – mheonyae

+0

Versuchen Sie 'formData.append ('FileUpload1', $ (" input [type = file] ") [0] .files [0]); 'stattdessen. Dies setzt voraus, dass Sie nur ein Steuerelement zum Hochladen von Dateien auf der Seite haben. – Lunster

+0

Ich habe versucht, aber immer noch nicht funktioniert: Uncaught TypeError: Ungültiger Aufruf bei e (jquery.min.js: 4) bei xb (jquery.min.js: 4) bei Function.r.param (jquery.min. js: 4) bei Function.ajax (jquery.min.js: 4) bei uploadImg (Default.aspx: 33) bei HTMLAnchorElement.onclick (Default.aspx: 21) – mheonyae