AngularJS文件上传发送过时的formData

时间:2014-08-27 11:10:19

标签: javascript angularjs file-upload form-data

我使用https://github.com/nervgh/angular-file-upload进行文件上传。

我有一个表单,除了上传文件外,还会发送一些其他字段。为清楚起见,我在此示例中仅发送一个字段:

$scope.save_with_upload = function(user) {
    $scope.uploader.formData = [{
        name: user.name,
    }];

    $scope.uploader.uploadAll();
}

假设name输入的值为 Test 1

  1. 当我第一次加载页面并单击保存时,它会发送文件,但根本不发送formData
  2. 然后我将name字段更改为测试2 并点击保存。它会发送文件,formData它发送的name的值为 Test 1
  3. 然后我将name字段更改为测试3 并点击保存。它发送文件并formData它发送的name的值是测试2
  4. ......依旧......
  5. 因此,似乎总是在最后一次调用formData之前发送分配给uploadAll 的数据。

    澄清一下:如果我在致电dir(user, $scope.uploader.formData)之前uploadAll,则会在两者中显示正确的最新值。

    我一直在苦苦挣扎几个小时,似乎看不出有什么不对劲。有什么想法吗?

1 个答案:

答案 0 :(得分:12)

将表单字段附加到FileItem对象 - 而不是FileUpload - 修复它:

uploader.onBeforeUploadItem = function(item) {
    formData = [{
        name: user.name,
    }];
    Array.prototype.push.apply(item.formData, formData);
};

原因是,实际上使用了FileItem上的设置。将文件添加到队列后,FileUpload的设置将复制到FileItem。因此,在将文件添加到队列后对FileUpload选项所做的任何更改都将无效。