0

baby parse (Papa Parse から分岐) を使用して、csv ファイルを取得し、データを Json に解析しようとしています。私がテストしているcsvファイルは非常に簡単です:

Column1,Column2,Column3
1,2,3
3,2,1

これまでのところ、 ng-file-uploadを使用してファイルを正常にロードし、ブラウザ経由で csv ファイルをロードしています。

私は今、赤ちゃんの解析を使用してこのファイルを取得し、データを JSON に変換しようとしています。

以下は私がこれまでに持っているものです:

コントローラー

// Watch for a csv file being uploaded.
$scope.$watch(function() {
    return $scope.file
    }, function(){
        $scope.upload($scope.file);
});

$scope.upload = function(file){
            if(file){
                Upload.upload({
                    url: 'api/admin/uploadCsv',
                    method: 'POST',
                    data: {userId: $scope.user._id},
                    file: file
                }).progress(function(evt){
                    console.log("firing");
                }).success(function(data){

                }).error(function(error){
                    console.log(error);
                })
            }
        };

ファイルのアップロード時に、アップロード関数が呼び出され、サーバー コントローラーが呼び出されます。アップロードされたファイルはアップロード機能に渡され、それを解析メソッドに渡そうとしています。

module.exports.uploadCsv = function(req, res){
    var file = req.files.file;
    var userId = req.body.userId;

    parsed = babyparse.parse(file.path, babyParseConfig);
    console.log("data is " + (JSON.stringify(parsed.data)));
    ...

console.log には次のように出力されます。

data is {"data":[],"errors":[],"meta":{"delimiter":",","linebreak":"\n","aborted":false,"truncated":false,"fields":["..\\App\\uploads\\565b8feecddbb1e41b7aa839test.csv"]}}

csv ファイルがどのように見えるかを考えると、 data:[] が空である理由がわかりません。

4

1 に答える 1

0

ここで提供されている回答 (ベビーパーサーでファイル名を入力する方法) を使用して、パーサーを動作させました。以下は私が最終的に得たものです:

   var uploadcontent = fs.readFileSync(targetPath, { encoding: 'binary' });
   var parsed = babyparse.parse(uploadcontent);
   console.log((JSON.stringify(parsed)));

uploadContent は、ファイル自体ではなく、ファイルを保存するディレクトリへのパスであることに注意してください。

上記は以下を出力します

{"data":[["Column1","Column2","Column3"],["1","2","3"],["3","2","1"]],"errors":[],"meta":{"delimiter":",","linebreak":"\r\n","aborted":false,"truncated":false}}

上記は、 console.log((JSON.stringify(parsed.data))); データだけを取得するようなものに洗練できます。

于 2016-01-17T20:47:00.323 に答える