2017-08-23 23 views
0

我想寫一個控制器,將文件上傳到S3位置。但是,在上傳之前,我需要驗證傳入文件類型是否爲csv。然後我需要閱讀文件來檢查文件等頭colummns我得到了文件的類型,按照下面的代碼片段:Sails Skipper:如何讀取和驗證csv文件並在上傳過程中排除無效的文件類型?

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

但是,如何讀取整個文件流和檢查頭和數據等?還有其他類似的問題,如(Sails.js Skipper: How to read the uploaded file stream during upload?)。但提到的解決方案是使用skipper-csv適配器(我不能使用,因爲我已經使用skipper-s3上傳到s3)。

有人可以發表一個關於如何閱讀上游並在上傳之前執行任何驗證的例子嗎?

回答

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。

此外,我們可以使用aws-sdk(https://www.npmjs.com/package/aws-sdk)進行s3上傳。 希望,這有助於某人。

相關問題