2014-01-15 14 views
5

Ich klicke auf 'Dateien hinzufügen' wähle eine Datei, dann erstellt sie ein Thumbnail (abhängig vom Browser) und zeigt den 'Upload' Button darunter an.Jquery-Fileupload-Plugin - Hochladen der Datei, aber sagt 'Dateiupload fehlgeschlagen'

Wenn ich auf "Upload" klicke, wird die Datei hochgeladen und die Meldung "Datei-Upload fehlgeschlagen." - Die Datei ist tatsächlich hochgeladen, aber ich bekomme diese Nachricht immer noch. Manchmal wird es nicht hochgeladen und ich bekomme die gleiche Nachricht.

Ich habe zwei Fehler -

  1. 1. im PHP error log 'PHP Warning: exif_imagetype(): Filename cannot be empty in ***\***\UploadHandler.php' ist, ich verstehe es nicht die ganze Zeit, aber.

  2. 2. ist jquery.validation auf der Seite - 'Uncaught Error: Syntax error, unrecognized expression: [name=files[]]'

Im Debugger es gerade zu '.auf ('springt fileuploadfail', function (e, Daten)', ohne irgendwo anders zu gehen und einmal dass vervollständigt sie die ganze page..guess erfrischt ich brauche eine 'return false' irgendwo

Danke für Ihre Hilfe

HTML:?.

<span class="btn btn-success fileinput-button"> 
    <i class="glyphicon glyphicon-plus"></i> 
    <span>Add files...</span> 
    <!-- The file input field used as target for the file upload widget --> 
    <input id="fileupload" type="file" name="files[]" multiple> 
</span> 
<br> 
<br> 
<!-- The global progress bar --> 
<div id="progress" class="progress"> 
    <div class="progress-bar progress-bar-success"></div> 
</div> 
<!-- The container for the uploaded files --> 
<div id="files" class="files"></div> 

Javascript:

var filepower = function() { 
'use strict'; 
var url = 'server/php/', 
    uploadButton = $('<button/>') 
     .addClass('btn btn-primary') 
     .prop('disabled', true) 
     .text('Processing...') 
     .on('click', function() { 
      var $this = $(this), 
       data = $this.data(); 
      $this 
       .off('click') 
       .text('Abort') 
       .on('click', function() { 
        $this.remove(); 
        data.abort(); 
       }); 
      data.submit().always(function() { 
       $this.remove(); 
      }); 
     }); 
$('#fileupload').fileupload({ 
    url: url, 
    dataType: 'json', 
    autoUpload: false, 
    acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, 
    maxFileSize: 5000000, // 5 MB 
    // Enable image resizing, except for Android and Opera, 
    // which actually support image resizing, but fail to 
    // send Blob objects via XHR requests: 
    disableImageResize: /Android(?!.*Chrome)|Opera/ 
     .test(window.navigator.userAgent), 
    previewMaxWidth: 100, 
    previewMaxHeight: 100, 
    previewCrop: true 
}).on('fileuploadadd', function (e, data) { 
    data.context = $('<div/>').appendTo('#files'); 
    $.each(data.files, function (index, file) { 
     var node = $('<p/>') 
       .append($('<span/>').text(file.name)); 
     if (!index) { 
      node 
       .append('<br>') 
       .append(uploadButton.clone(true).data(data)); 
     } 
     node.appendTo(data.context); 
    }); 
}).on('fileuploadprocessalways', function (e, data) { 
    var index = data.index, 
     file = data.files[index], 
     node = $(data.context.children()[index]); 
    if (file.preview) { 
     node 
      .prepend('<br>') 
      .prepend(file.preview); 
    } 
    if (file.error) { 
     node 
      .append('<br>') 
      .append($('<span class="text-danger"/>').text(file.error)); 
    } 
    if (index + 1 === data.files.length) { 
     data.context.find('button') 
      .text('Upload') 
      .prop('disabled', !!data.files.error); 
    } 
}).on('fileuploadprogressall', function (e, data) { 
    var progress = parseInt(data.loaded/data.total * 100, 10); 
    $('#progress .progress-bar').css(
     'width', 
     progress + '%' 
    ); 
}).on('fileuploaddone', function (e, data) { 
    $.each(data.result.files, function (index, file) { 
     if (file.url) { 
      var link = $('<a>') 
       .attr('target', '_blank') 
       .prop('href', file.url); 
      $(data.context.children()[index]) 
       .wrap(link); 
     } else if (file.error) { 
      var error = $('<span class="text-danger"/>').text(file.error); 
      $(data.context.children()[index]) 
       .append('<br>') 
       .append(error); 
     } 
    }); 
}).on('fileuploadfail', function (e, data) { 
    $.each(data.files, function (index, file) { 
     var error = $('<span class="text-danger"/>').text('File upload failed.'); 
     $(data.context.children()[index]) 
      .append('<br>') 
      .append(error); 
    }); 
}).prop('disabled', !$.support.fileInput) 
    .parent().addClass($.support.fileInput ? undefined : 'disabled'); 
}; 
+1

Vermeiden Sie größeren Text in Ihrer Frage.>! – Anup

+0

Ich weiß, dass es eine Menge ist, aber ich kann nicht anders darüber nachdenken. –

+0

Das Ereignis fileuploadfail wird ausgelöst, wenn die Serverantwort einen HTTP-Fehlerstatus enthält. Also der Server hat Ihre Anfrage erhalten, und der Upload kann gut gemacht werden. Verwenden Sie ein serverseitiges Framework? – Fractaliste

Antwort

0

Sie schreiben nicht den Quellcode, aber wenn Sie auf die Antwort auf dem Server hinzufügen können, dann können Sie das Problem beheben, indem Sie die Rückgabestruktur Umsetzung hier: https://github.com/blueimp/jQuery-File-Upload/wiki/JSON-Response

Ich kann Ihnen nicht helfen, wenn Sie den Server nicht ändern können, obwohl der Bibliotheksautor sagt, dass es eine Möglichkeit gibt, die erwarteten JSON-Felder zu ändern/zu überfahren, so dass es keinen Fehler gibt.

0

Geben Sie entweder eine entsprechende erwartete Antwort vom Server zurück oder rufen Sie data.jqXHR ab. Dies wird die Antwort vom Server enthalten. Sie können damit überprüfen, ob der Upload erfolgreich war oder nicht.

Verwandte Themen