AngularJS文件上传发送过时的formData

Paw*_*ski 6 javascript file-upload form-data angularjs

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

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

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

    $scope.uploader.uploadAll();
}
Run Code Online (Sandbox Code Playgroud)

假设name输入的值是Test 1.

  1. 当我第一次加载页面并单击" 保存"时,它会发送文件但根本不发送formData.
  2. 然后我将name字段更改为测试2并点击保存.它发送文件formData,name它发送的值是Test 1.
  3. 然后我将name字段更改为测试3并点击保存.它发送文件formData,name它发送的值是测试2.
  4. … 等等 …

所以它似乎总是发送在最后一次调用formData 之前分配的数据uploadAll.

澄清dir(user, $scope.uploader.formData)一下:如果我在调用之前就这样做uploadAll,它会在两者中显示正确的最新值.

我一直在努力工作几个小时,似乎无法看出什么是错的.有任何想法吗?

Paw*_*ski 12

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

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

原因是,实际上使用了设置FileItem.将文件添加到队列时,会将设置FileUpload复制到FileItem.因此FileUpload,将文件添加到队列后对选项所做的任何更改都将不起作用.