保持上传队列直到第一次上传在 fineupoader 中完成

Holding the upload queue until the first upload is complete in fineupoader

我有几个文件正在使用 fineuploader 上传,但有两件事我想尝试做。

  1. 以某种方式对队列进行排序,以便第一个上传的文件是特定文件类型。
  2. 上传第一个文件后,使用第一次上传返回的一些数据更改其他文件的端点和参数。

如果我在第一个文件上传后添加文件,我就可以正常工作。我正在考虑在首次上传完成后解决的 onsubmit 回调中的某种承诺。我只是不确定如何做到这一点。

这是我目前拥有的一些代码。

var first = true;
var returnedparam;
var uploader = new qq.FineUploader({
  element: document.getElementById('fine-uploader'),
  maxConnections: 1,
  request: {
    paramsInBody: false,
    endpoint: '/endpoint1'
    params: {
      option:1
    }
  },
  callbacks: {
    onSubmit: function(id,name) 
    {

      if(name.toLowerCase().indexOf('.jpg')>0 && !first)
      {
        //change the parameters for uploading the preview file.  
        if(returnedparam != '') 
        {
          this._endpointStore.set('/endpoint2',id);
          this.setParams({
            option: returnedparam;
          });
        }

      } elseif (!first) {
        this._endpointStore.set('/endpoint3',id);
        this.setParams({
          option: returnedparam;
        });
      }
    },
    onComplete : function(id,name,obj,xhr) 
    {
      if(first) //store a paramter from the first upload to be used for the remaining 
      {
        returnedparam = obj.param;
        first = false;
      }
      //do something with the file.         
    }
  }
});

首先,在上传任何文件之前,将通过 API 或文件选择器为所有已 "submitted" 的文件触发 onSubmit。因此,这对解决您问题中的#2 没有用。相反,您需要处理 onComplete 事件,从服务器对上传请求的响应中获取任何数据。从表面上看,这将包含用于后续文件的端点。有一个 response 参数传递给您的 onComplete 处理程序,它将包含已解析的 JSON 响应。此时,您可以调用 the setEndpoint API method(省略 ID 参数)来更新所有后续文件的端点。

将自动上传设置为 true(默认)Fine Uploader 将在提交文件后立即上传文件,或者至少将其排队直到连接空闲。因此,您需要考虑在 Fine Uploader 之外处理文件选择,对文件进行排序,然后通过 the addFiles API method 以正确的顺序将它们提交给 Fine Uploader。目前,Fine Uploader 不以任何特定方式对提交文件的顺序进行排序(除了确保缩放图像在原始图像之前上传)。