Angularjs - 在特定位置下载文件

时间:2016-04-21 14:12:54

标签: angularjs node.js save

这是情况。 我有一个角度应用程序,需要通过机器使用,你可以放一个USB密钥。 可以从相应的后端进行多次导出,并且需要直接在密钥上下载导出(pdf,csv或rtf),而无需询问用户。 此外,我需要能够检测到密钥是否存在并显示错误。

我不认为只使用铬角度就可行。

我在考虑在每台可以访问文件系统的机器上创建一个本地nodejs服务器。当使用带有表单数据的邮递员时,它可以正常工作,但我不知道如何将一个以角度方式下载的文件作为formdata传递给nodejs服务器,我不断收到不正确的pdf文件。

TLDR: 我需要能够拥有这样的链:

  • 以角度
  • 从后端获取文件
  • 使用下载的文件
  • 向本地(nodejs)服务器发布请求
  • 在nodejs中接收文件以将其保存在磁盘上

我对其他想法持开放态度,如果这个想法不起作用,只要我能下载这个文件我很高兴。

当前nodejs代码,当我使用postman发布文件时有效:

router.post('/save', function(req, res, next) {
  console.log('savexvbxc');
  var fstream;
  //test if USB key is available
  fs.stat(basePath, function(err, stats) {
    if (err) {
      console.log('error, key not present');
      res.send(412, 'FAILURE');
    }
    var filename = basePath + 'toti.pdf';
    console.log('filename is ' + filename);
    if (req.busboy) {
      console.log('busboy loaded');
      req.busboy.on('file', function(fieldName, fileStream, fileName, encoding, mimeType) {
        console.log('Saving: ' + filename + ' ' + fileName);
        fstream = fs.createWriteStream(filename);
        fileStream.pipe(fstream);
        fstream.on('close', function() {
          console.log('successfully saved ' + filename);
          res.status(200).send('SUCCESS');
        });
        fstream.on('error', function(error) {
          console.log('failed saved ' + filename);
          console.log(error);
          res.send(500, 'FAILURE');
        });
      });
      req.busboy.on('error', function(error) {
        console.log('failed saved ' + filename);
        console.log(error);
        res.send(500, 'FAILURE'); 
      });
      return req.pipe(req.busboy);
    } else {
      console.log('error, busboy not loaded');
      res.send(500, 'FAILURE');
    }
  });
});

当前不起作用的角度代码:

var dlReq = {
      method: 'GET',
      url: '/fep/documents/TVFI_FEP_0015_SFS_Specifications_Fonctionnelles_Detaillees_V00.9.pdf',
      headers: {
        'Content-Type': 'application/pdf',
        'Accept': 'http://localhost:4000/fep/documents/TVFI_FEP_0015_SFS_Specifications_Fonctionnelles_Detaillees_V00.9.pdf'
      },
      responseType: 'arraybuffer'
    };
    $http(dlReq).then(function(data, status, headers, config) {
      console.log(resp);
      var file = new Blob([(resp)], {type: 'application/pdf'});
      var formdata = new FormData();
      formdata.append('file', file);
      var request = {
        method: 'POST',
        url: 'http://localhost:4080/save',
        data: formdata,
        headers: {
          'Content-Type': undefined,
          'Accept': '*/*'
        }
      };

      // SEND THE FILES.
      $http(request)
        .success(function(d) {
          console.log('ok', d);
        })
        .error(function() {
          console.log('fail');
        });
    });

谢谢

0 个答案:

没有答案