NodeJs将csv字符串内容上传到s3

pvabu6sv  于 12个月前  发布在  Node.js
关注(0)|答案(3)|浏览(98)

我曾试图上传csv内容数据到s3,但它的一些如何不工作下面我的代码存储到csv. gz文件的csv数据

var filename= "ff1.csv.gz"
var csvData = "username,email,year,month\n"
csvData = csvData + username +","+email+","+year_data+","+month_data+"\n"

var paramsu = {
    Bucket: bucket1,
    Key: filename,
    Body: csvData,
    ContentType: 'application/octet-stream'

  };

var res = await s3.putObject(paramsu).promise();

字符串
它显示损坏的gzfile无法提取
任何帮助都能保存我

yxyvkwin

yxyvkwin1#

如果你还没有准备好文件,你可以创建一个writestream并使用它传递给s3 sdk。
问题在这里回答https://stackoverflow.com/a/50291380/2688699

jc3wubiy

jc3wubiy2#

我们可以使用multer-s3将IMAGE/ CSV/ EXCEL文件上传到AWS s3。
我使用**.single(fieldname)**方法上传单个文件。

const aws = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');

const s3 = new aws.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY,
    secretAccessKey: process.env.AWS_SECRET_KEY,
    region: process.env.REGION,
});

 const upload = multer({
   storage: multerS3({
     s3: s3,
     bucket: process.env.AWS_S3_BUCKET,
     metadata: function (req, file, cb) {
       cb(null, {fieldName: 'Meta_Data'});
     },
     key: function (req, file, cb) {
      cb(null, file.originalname);
     },
     limits: {
        fileSize: 1024 * 1024 * 5 //  allowed only 5 MB files
    }
   })
 }).single('file');
 
exports.uploadfile = async(req,res,next)=>{
   try{ 
         upload(req,res, function(err){
             if(err){
                 console.log(err);
             }
             console.log(req.file.location);    
   })
})
}catch (err){
   res.status(400).json({
       status : 'fail', 
       message : err.message
   });
}
}

字符串
在路由文件中

router.route('/')
      .post(imageController.uploadfile);

odopli94

odopli943#

你只需要将ContentType设置为text/csv,并将Body作为一个简单的字符串传递,就像下面这样。

await s3Client.putObject({
  Bucket: bucketName,
  Key: 'myFile.csv',
  ContentType:'text/csv',
  Body: "username,password\nuser1,pass1\nuser2,pass2\n"
}).promise();

字符串

相关问题