Загрузка файла Jquery всегда завершается неудачей, когда загрузка файла отменена

Я пытаюсь подключить плагин загрузки Jquery для файла Blueimp, работающий на моем веб-сайте, но на всю жизнь я не могу заставить его загружать файлы. Я работаю над этим весь день и застрял. Он загрузит файл и отправит его в класс UploadHandler, но когда он пытается завершить функцию handle_file_upload он получает:

 file_put_contents( $file_path, fopen('php://input', 'r'), $append_file ? FILE_APPEND : 0 ); 

но всегда возвращает 0. Я не могу понять, почему файл не будет загружен. Полный ответ, который я получаю, это:

 {"files":[ {"name":"1397489968-32", "size":0, "type":"multipart\/form-data; boundary=----WebKitFormBoundaryrmi4L2ouOmB4UTVm", "error":"File upload aborted", "deleteUrl":"http:\/\/onceridden.demomycms.co.uk\/eshop\/library\/ajax\/?file=1397489968-32", "deleteType":"DELETE"} ]} 

ajax.file-upload.php только создает экземпляр UploadHandler, больше ничего.

Если вы хотите увидеть полный код для UploadHandler, вы можете скачать его из github, он слишком велик для меня, чтобы публиковать здесь.

Может кто-нибудь, пожалуйста, скажите мне, почему файлы не будут загружены? Да, я сделал основы, такие как проверка папки CHMOD 777. Я пробовал это с различными файлами разных типов (они должны быть изображениями для работы, ограниченными jpg, png или gif) и размерами; все они дают одинаковый результат.

По запросу это файл JS:

 $(function () { 'use strict'; // Change this to the location of your server-side upload handler: var url = '/eshop/library/ajax/ajax.file-upload.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(); }); }); $('#register-photo').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('#register-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); $('#register-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'); }); 

Это в значительной степени файл по умолчанию, который вы получаете с плагином, только с измененным идентификатором, чтобы соответствовать моей форме.


Обновить

После долгих игр и тестирования я обнаружил, что проблема возникает, когда вы меняете имя входа из files на что-либо еще. Почему я понятия не имею. Это, очевидно, проблема, если вы хотите, чтобы она работала на нескольких входах на странице …

Я сам создал очень простую версию интерфейса, и это позволяет мне изменять имя файла, поэтому оно должно быть связано с примером, который они используют. Я хотел бы иметь возможность использовать изображения предварительного просмотра и такие (что-то, что я не мог понять в моем простом тесте), поэтому мне нужно решить эту проблему.

Это на случай, если кто-либо еще застрянет в этой проблеме. Проблема вызвана параметром paramName , который, если не задан, принимает его значение от имени ввода. Он не задан по умолчанию, поэтому при изменении имени ввода я также менял paramName, то есть он больше не соответствовал переменной, возвращаемой из класса UploadHandler.

Решение состоит в том, чтобы добавить paramName: 'files[]' в качестве опции.

Я столкнулся с той же проблемой (действие прервано), и у меня есть другой ответ.

В папке / каталоге, в которой я загружался файл, не было разрешено загружать файл. на сервере Linux вы можете запускать следующие команды chmod 777 files Когда я дал разрешение на этот каталог, я не получил эту ошибку и смог загрузить файл успешно.

Я запускаю centOS 6.9. chmod 0755 / server / php / files (а не 777), и я изменил права собственности (chown) на apache. Ta-Da!