javascript – AngularJS文件上传发送过时的formData

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

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

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

    $scope.uploader.uploadAll();
}

假设输入的名称值为Test 1.

>当我第一次加载页面并单击“保存”时,它会发送文件,但根本不发送formData.
>然后我将名称字段更改为测试2并点击保存.它发送文件和formData,但它发送的名称值是Test 1.
>然后我将名称字段更改为测试3并点击保存.它发送文件和formData,但它发送的名称值是Test 2.
> …依此类推……

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

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

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

解决方法

将表单字段附加到FileItem对象 – 而不是FileUpload – 修复它:
uploader.onBeforeUploadItem = function(item) {
    formData = [{
        name: user.name,}];
    Array.prototype.push.apply(item.formData,formData);
};

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...