当前位置: 首页 > 面试题库 >

jQuery文件上传始终失败,文件上传中止

颜举
2023-03-14
问题内容

我试图让Blueimp的Jquery File Upload插件在我的网站上正常工作,但是我一生都无法用它来上传文件。我整天都在努力,被困住了。它将上传文件并将其提交到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下载,对于我来说太大了,无法在此处发布。

有人可以告诉我为什么文件无法上传吗?是的,我已经完成了一些基本工作,例如检查文件夹是否为CHMOD777。我已经尝试过使用各种不同类型的文件(它们必须是图像,但必须限制为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');
});

这几乎是您通过插件获得的默认文件,只是ID更改为与我的表单匹配。

更新资料

经过大量的测试和测试,我发现当您将输入的名称从更改为其他名称时,就会出现问题files。为什么我不知道。如果您想让它在页面上的多个输入上运行,这显然是一个问题…

我自己创建了一个非常简单的接口版本,它 确实
允许我更改文件名,因此它必须与它们使用的示例有关。我希望能够使用预览图像等(在我的简单测试中无法弄清的东西),因此我需要解决此问题。


问题答案:

以防万一其他人也陷入这个问题。该问题是由该paramName选项引起的,如果未设置该选项,它将使用输入名称中的值。默认情况下未设置它,因此在更改输入名称时,我也在更改paramName,这意味着它不再与从UploadHandler类返回的变量匹配。

解决方案是添加paramName: 'files[]'为选项。



 类似资料:
  • 问题内容: 我可以使用以下jQuery代码使用ajax请求的POST方法执行文件上传吗? 如果可能,我是否需要填写部分?这是正确的方法吗?我只将文件发布到服务器端。 我一直在搜索,但是我发现是一个插件,而在我的计划中我不想使用它。至少目前是这样。 问题答案: 上传文件是 不是 有可能通过AJAX。 您可以使用来上传文件,而无需刷新页面。 更新 使用XHR2,支持通过AJAX上传文件。例如通过对象,

  • 我试图通过使用FormData通过AJAX上传文件。如果我提交AJAX调用而没有选择任何要上传的文件,post工作正常,服务器上接收到其他字段(不是文件上传)。但是,如果我选择一个要上传的文件,调用到达服务器时没有任何数据(在PHP中,$_POST和$_FILES数组都是完全空的)。我知道如果您没有告诉jQuery不要设置contentType可能会发生这种情况,但是我将contentType和p

  • 问题内容: 看来我还没有清楚地传达出我的问题。我需要发送一个文件(使用AJAX),并且需要使用Nginx HttpUploadProgressModule 获取文件的上传进度。我需要一个很好的解决方案。我已经尝试过使用jquery.uploadprogress插件,但是我发现自己不得不重写其中的大部分内容,以使其在所有浏览器中都能正常工作并使用AJAX发送文件。 我所需要的只是执行此操作的代码,它

  • 接口说明 上传文件初始化 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /wish3dearth/api/material/upload/v1.0.0/startUploadInit 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN file

  • 接口说明 上传文件初始化 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 POST /wish3dearth/api/material/upload

  • 问题内容: 我已经尝试上传一个简单的文本文件了几个小时,但似乎仍然无法正常工作。 我不断收到无效的表格,说我缺少“ file_source”。 为什么“ file_source”没有发布? 我还可以发送“ file_source”,但是它仍然说它丢失了。应该为Django FileFiled提供哪种类型的元素? Django表格: Django模板(呈报形式): jQuery / Ajax上传: