2017-12-18 281 views
0

我從JSON內容中即時創建一個CSV文件,並在S3存儲區上傳生成的CSV文件,而不是先在本地保存文件。如何使用NodeJS在S3 Bucket上上傳CSV文件?

下面是我的代碼片段,使用下面的代碼我上傳到S3存儲桶的CSV文件,但它似乎並不是正確的CSV格式。

var uploadCSVFileOnS3Bucket = function(next, csvFileContent,results) { 
console.log("uploadCSVFileOnS3Bucket function started"); 
var bufferObject = new Buffer.from(JSON.stringify(csvFileContent)); 
var filePath = configurationHolder.config.s3UploadFilePath; 
var s3 = new AWS.S3(); 
var params = { 
    Bucket: 'bucket_name' 
    Key: 's3UploadFilePath', 
    Body: bufferObject, 
    CacheControl:'public, max-age=86400' 
} 
s3.upload(params, function(err, data) { 
    if (err) { 
     console.log("Error at uploadCSVFileOnS3Bucket function",err); 
     next(err); 
    } else { 
     console.log("File uploaded Successfully"); 
     next(null, filePath); 
    } 
}); 

};

此外,我使用「json2csv」npm模塊從JSON生成csv文件內容。

下面是代碼:

var generateCSVFile = function(next,callback,csvFileContent) { 
    console.log("generateCSVFile function started",csvFileContent); 
    if(csvFileContent && csvFileContent.length>0) { 
    var fields = ['field1','field2','field3',........]; 
    var csv = json2csv({ data: csvFileContent, fields: fields }); 
    console.log('created',csv); 
    next(null,csv); 
    } 
    else { 
    next(null,[]); 
    } 
} 

請讓我們知道上面的代碼是怎麼了。

回答

0

在你的params中添加ContentDisposition:'attachment'。

否則,你也可以閱讀文件並上傳到S3

fs.readFile(FILEPATH, function(err, file_buffer) { 
      var params = { 
       Bucket: //bucketname, 
       Key:key, 
       ContentDisposition: 'attachment', 
       Body: file_buffer 
      }; 
      s3.upload(params, function(err, data) { 
       if (err) { 
        console.log("Error in upload"); 
        callback(err, null) 
       } 
       if (data) { 
        console.log("Upload Success", data); 
        callback(null, data) 
       } 
      }); 
}); 
+0

我試過使用上面的標題,但它沒有提供給我正確的結果。 –

+0

你能ping我錯誤 – Vipul

+0

嗨我再次嘗試使用上述標題,它的工作原理,我在一個單獨的評論中添加了整個代碼。謝謝 –

1

您好我下面報頭值再次嘗試,它爲我工作。下面是代碼:

var s3 = new AWS.S3(); 
var params = { 
    Bucket: bucketName, 
    Key: filePath, 
    Body: csvFileContent, 
    ContentType: 'application/octet-stream', 
    ContentDisposition: contentDisposition(filePath, { 
     type: 'inline' 
    }), 
    CacheControl: 'public, max-age=86400' 
} 
s3.putObject(params, function(err, data) { 
    if (err) { 
     console.log("Error at uploadCSVFileOnS3Bucket function", err); 
     next(err); 
    } else { 
     console.log("File uploaded Successfully"); 
     next(null, filePath); 
    } 
});