java将文件流传给前端,node服务器使用pipe将文件流发送到前端,前端应如何接收...

如题,在node端将文件转化为文件流并通过pipe转给res后,前端按照查阅的资料,配置xhr,但是收到的response打印出来size为0;

node端get接口代码如下:

app.get('/api/download',function(req, res, next){

var currDir = path.join(__dirname,req.query.dir),

fileName = req.query.name,

currFile = path.join(currDir,fileName),

stats = fs.statSync(currFile);

fs.exists(currFile,function(exist) {

if(exist){

res.set({

"Content-type":"application/octet-stream",

"Content-Disposition":"attachment;filename="+encodeURI(fileName),

'Content-Length': stats.size

});

let fReadStream = fs.createReadStream(currFile);

fReadStream.pipe(res);

}else{

res.set("Content-type","text/html");

res.send("file not exist!");

res.end();

}

});

});

前端接收返回关键代码如下:

var xhr = new XMLHttpRequest();

xhr.open("get", '/api/download?dir='+response.data.dir+'&name='+response.data.fileName, true);

xhr.responseType = "blob";

xhr.onload = function() {

if (this.status == 200) {

var blob = this.response;

console.log(blob);

}};

xhr.send();

此时前端控制台打印出来的blob为

bVblga2?w=922&h=182

但是如果在node端将pipe注释掉,输入如下代码后,前端便能获得有size的blob。

//fReadStream.pipe(res);

res.send('testtesttesttest')

----------更新线----------

发现问题的一个更深层的表现,直接将拼接好的get方式的url输入浏览器可以直接下载,此时node端获得请求后文件流的size不为0,而通过上文写的xhr请求时,获取的node文件流size为0,也有仔细检查两者输入后获取的文件路径,并没有什么不同,所以就是请求的方式有问题了??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值