2016-07-05 64 views
-1

我發送文件給客戶端下載,但是當我從文件接收到的數據時,它的拋出異常JSON無效,是否有任何其他方法發送像res.download這樣的文件並將內容設置爲json。我正在尋找更好的方法來發送文件,而不使用angularJs FileSaver它應該填充對話框到瀏覽器,是否有可能使用nodejs實現這個?sendFile拋出異常無效的JSON?

app.js

app.get('/file', function (req, res) { 
    var dir = './ditLogs'; 
    var root = path.resolve('./ditLogs'); 
    var fileName = req.query.file_name; 
    var data; 
    fs.readdir(dir, function(err, items) { 
     items.forEach(function(file){ 
      if(fileName === file){ 
       data = file; 
       console.log('DATA',data); 
       res.setHeader('Content-Disposition', 'attachment; filename=' + data); 
       res.setHeader('Content-type', 'text/plain'); 
       res.sendFile(data, {root: root}); 
      } 
     }); 
    }); 
}); 

Factory.js

getFile:function(file_name){ 
      return $http.get("/file?file_name="+file_name); 
     } 

ctrl.js

$scope.downloadFile = function(message){ 
     DitFactory.getFile(message).then(function(response,$window){ 
      var data = JSON.stringify(response.data); 
      var blob = new Blob([data], { type: 'text/plain;charset=utf-8' }); 
      FileSaver.saveAs(blob, 'text.txt'); 
      console.log(response.data.level); 
     }); 

file.txt的

{"level":"info","message":"Test Log messages"} 
{"level":"info","message":"Test Log messages"} 
{"level":"info","message":"Test Log messages"} 
+0

你剛纔問這個[問題](http://stackoverflow.com/questions/38208285/how-to-create-object-when-you - 從文件和發送 - 響應中讀取多行 - 行)[一堆](http://stackoverflow.com/users/6014098/hussain?tab=questions) – peteb

+0

我問這個問題,但我想我需要解釋越來越多的標籤應該添加更多的澄清,我之所以問新的問題。 – hussain

回答

1

由於該文件確實無效JSON,因此您會收到錯誤消息。

您需要解析文件並將其轉換爲數組,或以純文本格式發送文件,並將其原樣傳遞到文件保護程序。

分析文件,你可以這樣做:

data.split('\n').reduce(function (result, x) { 
    x = x.trim(); 
    if (x) { 
    result.push(x); 
    } 
    return result; 
}, []) 
+0

感謝它幫助! – hussain