Javascript 使用AngularJS和$http PUT在请求正文中上载文件
我正在通过一个API调用上传一个文件,该调用要求将文件放入请求主体中并使用PUT。使用下面的代码,我可以上传一些创建文件并返回200状态的东西。rawData长度正好是基于初始文件大小的预期长度。但是,创建的文件有一些附加字节,无法打开。例如,我上传的234 kb的jpg文件在上传后有352 kb,而12 kb的docx文件在上传后有17 kbJavascript 使用AngularJS和$http PUT在请求正文中上载文件,javascript,angularjs,file,upload,Javascript,Angularjs,File,Upload,我正在通过一个API调用上传一个文件,该调用要求将文件放入请求主体中并使用PUT。使用下面的代码,我可以上传一些创建文件并返回200状态的东西。rawData长度正好是基于初始文件大小的预期长度。但是,创建的文件有一些附加字节,无法打开。例如,我上传的234 kb的jpg文件在上传后有352 kb,而12 kb的docx文件在上传后有17 kb var contentType = file.type; var reader = new FileReader();
var contentType = file.type;
var reader = new FileReader();
reader.onload = function (e) {
var rawData = reader.result;
$http({
url: appSettings.serverPath + '/File/' + fileId + '/Content',
method: 'PUT',
headers: { 'Content-Type': undefined },
data: rawData,
transformRequest: []
}).success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (error) {
deferred.reject(error);
});
};
reader.readAsBinaryString(file);
除了使用undefined的“Content-Type”,我还使用了文件的Content-Type,但我有同样的问题
我尝试在FileReader上调用readAsArrayBuffer方法并传入一个rawData的UINT8数组,但这不会传入请求中的任何数据,并创建一个0字节的文件
我还尝试在FileReader上调用readAsDataURL方法,该方法对数据进行完全不同的编码,这样我的rawData和生成的文件对于jpg来说是313KB。文件仍然损坏,无法打开
是否有一些额外的编码等,我应该做发送正确的数据
提前谢谢 无需使用FileReader API来读取文件。自动序列化文件对象,因为它们是一种特殊类型的对象 另外,由于$http服务已经返回承诺,因此不需要使用
$q.defer
创建承诺
此外,还提供了.success
和.error
方法
FileReader.readAsBinaryString()已弃用 rawData长度正好是基于初始文件大小的预期长度。但是,创建的文件有一些附加字节,无法打开。例如,我上传的234 kb的jpg文件在上传后有352 kb,而12 kb的docx文件在上传后有17 kb
var contentType = file.type;
var reader = new FileReader();
reader.onload = function (e) {
var rawData = reader.result;
$http({
url: appSettings.serverPath + '/File/' + fileId + '/Content',
method: 'PUT',
headers: { 'Content-Type': undefined },
data: rawData,
transformRequest: []
}).success(function (data, status, headers, config) {
deferred.resolve(data);
}).error(function (error) {
deferred.reject(error);
});
};
reader.readAsBinaryString(file);
将二进制字符串转换为。这意味着128-255范围内的数据字节用2个字节编码。不要将二进制数据转换为DOMstrings。使用
FileReader.readAsBinaryString()文件
非标准的
此功能是非标准的,不在标准轨道上。不要在面向Web的生产站点上使用它:它不会适用于所有用户。实现之间也可能存在很大的不兼容性,并且行为可能会在将来发生变化
根据W3C 2012年7月12日的工作草案,[It]现在已被弃用
//reader.readAsBinaryString(file);
reader.readAsArrayBuffer(file)