Streaming file from S3 with Express including information on length and filetype

后端 未结 3 1431
忘了有多久
忘了有多久 2020-12-23 17:12

Using the aws-sdk module and Express 4.13, it\'s possible to proxy a file from S3 a number of ways.

This callback version will return the file body as a

3条回答
  •  死守一世寂寞
    2020-12-23 17:18

    Building on André Werlang's answer, we have done the following to augment AWS Request objects with a forwardToExpress method:

    const _ = require('lodash');
    const AWS = require('aws-sdk');
    
    AWS.Request.prototype.forwardToExpress = function forwardToExpress(res, next) {
        this
        .on('httpHeaders', function (code, headers) {
            if (code < 300) {
                res.set(_.pick(headers, 'content-type', 'content-length', 'last-modified'));
            }                            
        })
        .createReadStream()
        .on('error', next)
        .pipe(res);
    };    
    

    Then, in our route handlers, we can do something like this:

    s3.getObject({Bucket: myBucket, Key: myFile}).forwardToExpress(res, next);
    

提交回复
热议问题