访问实际文件名

时间:2015-05-13 21:03:26

标签: jquery fine-uploader

对于某些文件名编码问题(西班牙用户)和其他一些问题,我们需要手动构建上传文件的文件名。

当Fine Uploader将信息传递给服务器时,代码会将目标文件名(在下面的用例中)更改为“my_name.jpg”。 handler.php文件将具有该名称的文件保存到文件系统,然后在uploadName参数中返回该新文件名。这一切都正常。

当我通过uploadName参数将该信息返回到Fine Uploader时,我希望能够在javascript中访问该新文件名,以便我可以调用将文件名存储到数据库中。

相关代码如下:

设定:

 var settings = {
    debug: true,
    request: {
        endpoint: 'ajax/endpoint.php',
    },
    deleteFile: {
        enabled: true,
        endpoint: 'ajax/endpoint.php'
    },
    retry: {
        enableAuto: true
    },
    callbacks: {
        onComplete: function(id, name, response) {
            this.setName(id, response.uploadName);
        }
    }, 
    autoUpload: true,
    editFilename: false,
    retry: {
        enableAuto: true
    },
    resume: {
        enabled: true
    },
    chunking: {
        enabled: false
    },
    session: {
        endpoint: 'ajax/initialfiles.php'
    },
    validation: {
        allowedExtensions: ['jpg', 'gif', 'png'],
        itemLimit: 3,
        sizeLimit: 5000000
    }
};

代码:

$uploaderDiv = $('#fine-uploader');

uploaderObj = $uploaderDiv.fineUploader(settings).on("statusChange", function (event, id, oldStatus, newStatus) {
    if (newStatus == 'upload successful' || newStatus == 'deleted') {
        var files = uploaderObj.fineUploader('getUploads');
        $.each(files, function (i, file) {
            if (file.status == 'upload successful') {
                console.log(file);
            }
        });
    }
});

上传文件时,服务器的响应为:

{"success":true,"uuid":"f542c893-920a-4f58-a57f-7bd5d0f45294","uploadName":"my_name-715.jpg"}

但是,文件信息的控制台日志会生成:

{
batchId: "98b6a0c0-28ed-466f-8d69-9cea425c20a9"
id: 0
name: "Karen_Book (thumb).jpg",
originalName: "Karen_Book (thumb).jpg",
proxyGroupId: "acf40500-9c8b-4c6e-a4f6-2542443d458d",
size: 5977
status: "upload successful",
uuid: "f542c893-920a-4f58-a57f-7bd5d0f45294"
}

鉴于上述情况,如何在statusChange事件中获取文件名“my_name-715.jpg”?

1 个答案:

答案 0 :(得分:1)

如果您想要访问服务器的任何响应,则必须在an onComplete event handler内进行。响应JSON包含在传递给处理程序的参数中。听起来您想要使用更新的名称(来自您的服务器?)向您的服务器发出请求。在同一个处理程序中,您应该发送所需的任何请求。上传请求完成时会触发onComplete,并在删除请求完成时触发onDeleteComplete