2017-08-23 3 views
0

私はS3の場所にファイルをアップロードし、コントローラの書き込みしようとしています。しかし、アップロードする前に、受信ファイルの種類がcsvであるかどうかを確認する必要があります。そして私は、私はスニペット以下のとおり、ファイルの種類を持ったファイルなどのヘッダcolummnsをチェックするためにファイルを読み込む必要があります。帆スキッパー:どのように読んで、csvファイルを検証し、アップロード時に無効なファイルの種類を除外するために?

req.file('foo')._files[0].stream 

しかし、ファイル全体の流れを読み、ヘッダを確認する方法そして、データなど?(Sails.js Skipper: How to read the uploaded file stream during upload?)のような他の同様のQsがありました。しかし、言及した解決策は、(私はすでにS3にアップロードするスキッパー-S3を使用して、私が使用することはできません)スキッパー-CSVアダプタを使用することです。

は、誰かがアップストリームを読み、アップロードする前に検証を実行する方法の例を投稿してくださいことはできますか?

答えて

0

私の問題はどのように解決されましたか:実際のアップロード前に検証するストリームのコピーを作成しています。そして、元のストリームで自分のバリデーションをチェックし、一度パスしたら、コピーしたストリームを自分の望む場所にアップロードします。

Csvストリームを読むために、npmパッケージ:csv-parser(https://github.com/mafintosh/csv-parser)が見つかりました。これはヘッダー、データなどのイベントを扱いやすいと感じました。

const upstream = req.file('file'); 
const fileStreamMap = {}; 
const fileStreamMapCopy = {}; 
_.each(upstream._files, (file) => { 
    const stream = PassThrough(); 
    const streamCopy = PassThrough(); 
    file.stream.pipe(stream); 
    file.stream.pipe(streamCopy); 
    fileStreamMap[fileName] = stream; 
    fileStreamMapCopy[fileName] = streamCopy; 
}); 
// validate and upload files to S3, if Valid. 
validateAndUploadFile(fileStreamMap, fileStreamMapCopy); 
} 

validateAndUploadFile()私のCSVアップロードのための私のカスタム検証ロジックが含まれています

は、ストリームのコピーを作成するために、私は次のロジックを使用していました。

また、s3アップロードにはaws-sdk(https://www.npmjs.com/package/aws-sdk)を使用できます。 ホープこれは誰かに役立ちます。

関連する問題