是否可以通过AJAX顺序上传文件*?

时间:2016-04-20 18:03:14

标签: javascript fine-uploader

我使用dragAndDrop:reportDirectoryPaths选项成功实现了使用Fine Uploader上传目录结构。上传的每个文件都有qqpath属性来表示它来自的路径。

var exampleUploader = new qq.FineUploader({
    element: document.getElementById('fine-uploader'),
    template: 'qq-template-manual-trigger',
    request: {
        endpoint: '/api/UploadDocuments',
        params: {
            param1: "Test1",
            param2: "Test2"
        }
    },
    callbacks: {
        onComplete: function (id, name, responseJSON, xhr) {
            console.log("onComplete");
        },
        onAllComplete: function (id, name, responseJSON, xhr) {
            console.log("onAllComplete");
        }
    },
    multiple: true,
    dragAndDrop: {
        reportDirectoryPaths: true
    },
    autoUpload: true,
    debug: false
});

然而,有一个问题:文件是逐个上传的,但有时会同时调用ajax请求。如果具有相同目录结构的两个文件在同一时间传递给服务,则可以一次创建两次目录。有没有办法只对以前的成功做ajax请求?换句话说,有没有办法顺序上传文件,而不是同时上传文件(一堆文件一次传递到服务中)?

提前致谢, AJ

2 个答案:

答案 0 :(得分:0)

您遇到的问题是您的服务器存在问题,而不是客户端/浏览器端的问题。将您的前端限制为一次一个请求是短视的。这提出了一个完全不必要的瓶颈。您的服务器应该对所有这些进行排序。

接近方法是通过Fine Uploader分配的UUID键入上传的文件,然后稍后对存储层次结构进行排序。如果您不想信任Fine Uploader提供的UUID,您可以随时生成自己的服务器端,并使用响应返回它,而Fine Uploader将使用它来代替与该特定文件相关的所有其他请求。 / p>

另一种方法是让服务器只检查服务器端以查看目标文件的目录是否已存在。

请注意,您所依赖的此“qqPath”属性仅存在于Chrome / Opera中,并且仅在删除目录时才存在。

答案 1 :(得分:0)

如果您想使用精细上传程序逐个上传文件,最简单的方法是将最大连接数限制为1.

var exampleUploader = new qq.FineUploader({
    element: document.getElementById('fine-uploader'),
    template: 'qq-template-manual-trigger',
    request: {
        endpoint: '/api/UploadDocuments',
        params: {
            param1: "Test1",
            param2: "Test2"
        }
    },
    callbacks: {
        onComplete: function (id, name, responseJSON, xhr) {
            console.log("onComplete");
        },
        onAllComplete: function (id, name, responseJSON, xhr) {
            console.log("onAllComplete");
        }
    },
    maxConnections: 1,
    multiple: true,
    dragAndDrop: {
        reportDirectoryPaths: true
    },
    autoUpload: true,
    debug: false
});

默认情况下,参数maxConnections为3。