简体   繁体   中英

Download AWS S3 file directly to a directory

I want to automatically save the file im downloading from AWS S3 to my application folder. Right now this can be done manually. Code below:

    router.get("/download", (req, res) => {
    //File S3 URL
    var fileKey =
        "key";

    AWS.config.update({
        accessKeyId: IAM_USER_KEY,
        secretAccessKey: IAM_USER_SECRET,
        Bucket: BUCKET_NAME
    });

    var s3 = new AWS.S3();
    var file = fs.createWriteStream("test.csv");

    var options = {
        Bucket: "name",
        Key: fileKey
    };

    res.attachment(fileKey);

    var fileStream = s3
        .getObject(options)
        .createReadStream()
        .on("error", error => {
        console.log(error);
        res.json({ error: "An error has occured, check console." });
        })
        .on("httpData", function(data) {

        file.write(data);
        })
        .on("httpDone", function() {
        file.end();
        });

    fileStream.pipe(res);
    //   fse.writeFileSync("text.csv");
    });

As mentioned before, the file can be download and saved manually. But how can write the file and save it automatically in an specific folder?

Thank you

Here's an example of downloading an S3 object to a specific local file:

const AWS = require('aws-sdk');
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
var params = {Bucket: 'mybucket', Key: 'test.csv'};
var file = require('fs').createWriteStream('/tmp/test.csv');
s3.getObject(params).createReadStream().pipe(file);

The code for jarmod's answer, promisified:

const AWS = require('aws-sdk');
const s3 = new AWS.S3({apiVersion: '2006-03-01'});
const params = {Bucket: 'mybucket', Key: 'test.csv'};
const file = require('fs').createWriteStream('/tmp/test.csv');

new Promise((resolve, reject) => {
  const pipe = s3.getObject(params).createReadStream().pipe(file);
  pipe.on('error', reject);
  pipe.on('close', resolve);
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM