第三方API以字节数组的形式发送给我一个文件例如
(244511) [37, 80, 68, 70, 45, 49, 46, 52, 13, 10, 37, 226, 227, 207, 211, 13, 10, 49, 32, 48, 32, 111, 98, 106, 13, 10, 60, 60, 13, 10, 47, 84, 105, 116, 108, 101, 32, 60, 70, 69, 70, 70, 48, 48, 52, 69, 48, 48, 55, 53, 48, 48, 54, 70, 48, 48, 55, 54, 48, 48, 54, 70, 48, 48, 50, 48, 48, 48, 53, 50, 48, 48, 54, 49, 48, 48, 55, 48, 48, 48, 55, 48, 48, 48, 54, 70, 48, 48, 55, 50, 48, 48, 55, 52, 48, 48, 54, 70, 62, 13, …]
我知道文件的原始名称(包括扩展名),但不知道mime类型。
Mybackend (NodeJS)当前执行:
const data = JSON.parse(res.body).result[0] // 'data' is the byte array above
res.writeHead(200, { 'Content-Type': 'application/json' })
res.end({ data })
Myfrontend (AngularJS 1.x)这样做:
var data = rsp.data
var blob = new $window.Blob([data], {type: 'application/pdf;charset=utf-8'})
$window.saveAs(blob, filename)
(我几分钟前添加的application/pdf部分,看看它至少可以为pdf文件工作…它不会)
我真的不知道我应该怎么做才能把那个数组变成一个正确打开的文件,我已经尝试了所有我在网上找到的东西,但无济于事。文件被保存了,但是打开后不能工作。
我甚至不知道我是要改变前端还是后端,还是两者都要改变。
任何帮助都将非常感激。
解决方案是首先将字节数组转换为Uint8Array在前端。此外,在创建blob时指定mime类型显然是不必要的,这非常方便。
var bytes = new Uint8Array(rsp.data)
var blob = new $window.Blob([bytes])
$window.saveAs(blob, filename)