Javascript AngularJS 1.x:文件上载失败:传输期间未定义文件对象

Javascript AngularJS 1.x:文件上载失败:传输期间未定义文件对象,javascript,angularjs,Javascript,Angularjs,当我试图通过rest/json上传文件时,我得到一个400错误。我发现我的内容在文件上载rest请求期间未定义,但它是在读取器.readAsArrayBuffer之前定义的 我试图做的是将文件作为BASE64编码字符串传递。我有一种感觉,在目前的情况下,我做得不对 这里是上传的功能 $scope.uploadFile = function() { $scope.files.forEach(function(file) { var reader =

当我试图通过rest/json上传文件时,我得到一个
400
错误。我发现我的
内容在文件上载rest请求期间未定义,但它是在
读取器.readAsArrayBuffer
之前定义的

我试图做的是将文件作为
BASE64
编码字符串传递。我有一种感觉,在目前的情况下,我做得不对

这里是上传的功能

    $scope.uploadFile = function() {
        $scope.files.forEach(function(file) {
            var reader = new FileReader();
            var fileObject = {
                'documentCase': {
                    'id': successResponse.data.documentCase.id,
                    'code': successResponse.data.documentCase.code
                },
                'code': successResponse.data.documentCase.code,
                'content': reader.readAsArrayBuffer(document.getElementById(file.id).files[0]),
                'name':'hi',
                'description':'hi'
            };

            $http.post (webserviceUrl + documentCaseFileCreate, fileObject, {
                headers: {
                    'Content-Type': 'application/json'
                }
            }).then(function successCallback(response) {
                console.log('file transfer ok');
                console.log(response);
            }, function errorCallback(response) {
                console.error('file transfer error');
                console.log(response);
            });
        });
    };

提前感谢您的帮助

我必须将post调用移动到函数中,该函数仅在文件加载后触发:

$scope.uploadFile = function(file) {
    var reader = new FileReader();
    reader.readAsBinaryString(document.getElementById(file.id).files[0]);
    reader.onload = function() {
        var fileObject = {
            'documentCase': {
                'id': successResponse.data.documentCase.id,
                'code': successResponse.data.documentCase.code
            },
            'code': successResponse.data.documentCase.code,
            'content': btoa(reader.result),
            'name':'tere',
            'description':'tere'
        };

        $http.post(webserviceUrl + documentCaseFileCreate, fileObject, {
            headers: {
                'Content-Type': 'application/json'
            }
        }).then(function successCallback(response) {
            uploadedFile = {
                'fileData': document.getElementById(file.id).files[0],
                'responseData': response
            };
            console.log('uploadedFile');
            console.log(uploadedFile);
            $scope.uploadedFiles.push(uploadedFile);
            $scope.files.splice(file.);
        }, function errorCallback(response) {
            console.error('file transfer error');
            console.log(response);
        });
    };
    reader.onerror = function() {
        console.error('error reading file');
    };

};

你能读懂文件吗?你确定?只需测试文件读取function@BurakAky这行代码100%工作
document.getElementById(file.id).files[0]
reader.readAsArrayBuffer(document.getElementById(file.id).files[0]的结果是什么
?@BurakAkyıldız
deps.js?bust=7.6.0:40732错误:无法在“FileReader”上执行“readAsArrayBuffer”:对象已在忙于读取blob。
尝试只发送一个文件,并在发送之前完全读取其内容。是否可以
readAsArrayBuffer
op异步工作?