加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用AngularJS从Node.JS服务器下载文件

发布时间:2020-12-17 10:19:44 所属栏目:安全 来源:网络整理
导读:我想从运行NodeJS的服务器上用我的浏览器下载文件. 在服务器端,为了提供我有的文件: exports.download = function(req,res) { var filename = "33.jpg"; var filePath = path.join(__dirname,'..','downloads',filename); var stat = fs.statSync(filePath)
我想从运行NodeJS的服务器上用我的浏览器下载文件.
在服务器端,为了提供我有的文件:
exports.download = function(req,res) {
  var filename = "33.jpg";
  var filePath = path.join(__dirname,'..','downloads',filename);
  var stat = fs.statSync(filePath);

  var fileToSend = fs.readFileSync(filePath);

  res.writeHead(200,{
      'Content-Type': 'image/jpeg','Content-Length': stat.size,'Content-Disposition': filename
  });
  res.end(fileToSend);
};

名为33.jpg的文件存在,大小为744Kb.来自客户的电话很有效

在AngularJS的客户端,这里是我如何调用post调用来获取文件(目前不使用参数uri):

$scope.downloadTrack = function(uri) {
  $http.post('/api/files/download',{uri: uri}).then(function(response) {
    var blob = new Blob([response.data],{ type: 'image/jpeg' });
    var fileName = response.headers('content-disposition');
    saveAs(blob,fileName);
  },function(response) {
    console.log('Download error');
    console.log(response);
  });
}

标题是好的(我可以检索文件名)

我的问题是下载了一个文件,但是大小为1.5Mb并且不可读.我尝试了不同的流方法,将数据附加到响应,管道等,但没有成功.
另一点(不确定是否重要):在Safari中打开文件并显示损坏的图标,在Chrome中保存文件

PS:如果信息有用,我和Yeoman一起创建了这个项目

谢谢大家

[更新]
新版服务器功能(仍然无法正常工作)

exports.download = function(req,filename);
  var stat = fs.statSync(filePath);
  var fileToSend = fs.readFileSync(filePath);
  res.set('Content-Type','image/jpeg');
  res.set('Content-Length',stat.size);
  res.set('Content-Disposition',filename);
  res.send(fileToSend);
};

[更新2]
double size文件在文件中随机包含额外的“efbffd”char序列,使其无法读取

通过设置为blob的响应类型的定义解决了问题
$http({
      url: '/api/files/download',method: "POST",data: {
        uri: uri
      },responseType: 'blob'
  }).then(function (response) {
      var data = response.data;
      var headers = response.headers;
      var blob = new Blob([data],{ type: 'audio/mpeg' });
      var fileName = headers('content-disposition');
      saveAs(blob,fileName);
  }).catch(function (response) {
    console.log('Unable to download the file')
  });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读