Angular表单上传无法在Safari中使用,可在Chrome中使用

时间:2016-11-01 11:15:31

标签: javascript angularjs safari

我尝试使用angular $ http。

上传文件

它在Chrome中正常运行,甚至在Safari中发送请求(并且服务器有200个响应),但文件没有上传到服务器。

我也尝试使用ngUpload库,但结果相同 - 文件尚未上传到服务器。

源代码:

var formData = new FormData();
            formData.append('userid', Users.getCurrentId());
            formData.append('avatar', myFile); // this is File() size abput 100K

            $http({
                url: AppState.getApiHost()+AppState.getApiPrefix() + '/setavatar',
                method: "POST",
                data: formData,
                headers: {'Content-Type': undefined}
            })
                .then(function (res) {
                    console.log('Success', res);
                })
                .catch(function (err) {
                    console.log('Error',err)
                });

1 个答案:

答案 0 :(得分:0)

我刚刚找到答案。问题是File()对象是使用File()构造函数创建的:

return new File([u8arr], filename, {type:mime}); 

但它与Safari无法正常工作。它创建File对象,其大小与文件大小相同,但实际文件为空。如果我尝试在附加到表单后发送它 - 表单已发送空文件(即使它看起来像一个非空文件)。

我已将其替换为此代码:

var the_blob = new Blob([u8arr]);
the_blob.lastModifiedDate = new Date();
the_blob.name = 'avatar.png'

return the_blob;

这对我有用