首页 > 解决方案 > 尽管 Node js 中的一切都是正确的,但无法从 aws s3 下载图像

问题描述

aws-sdk用于从 aws s3 代码下载图像没有错误但没有任何图像下载

const filePath = '../imgs';
const bucketName = 'xxx';
const key =  "uploads/imgs/logo.png";

const AWS = require('aws-sdk');
AWS.config = new AWS.Config();
AWS.config.accessKeyId = "xxxxxx";
AWS.config.secretAccessKey = "xxxxxxxx";
AWS.config.region = "us-east-1";
const fs = require('fs')
var s3 = new AWS.S3();

const s3download = (bucketName, keyName, localDest) => {

    if (typeof localDest == 'undefined') {
        localDest = keyName;
    }

    let params = {
        Bucket: bucketName,
        Key: keyName
    }

    let file = fs.createWriteStream(localDest)

    return new Promise((resolve, reject) => {
        s3.getObject(params).createReadStream()
            .on('end', () => {
                return resolve();
            })
            .on('error', (error) => {
                return reject(error);
            }).pipe(file)
    });
};
s3download(bucketName, key, filePath)

当打印结果出现时

_readableState: ReadableState {
    objectMode: false,
    highWaterMark: 16384,
    buffer: BufferList { head: null, tail: null, length: 0 },
    length: 0,
    pipes: [],
    flowing: null,
    ended: false,
    endEmitted: false,
    reading: false,
    sync: false,
    needReadable: false,
    emittedReadable: false,
    readableListening: false,
    resumeScheduled: false,
    errorEmitted: false,
    emitClose: true,
    autoDestroy: true,
    destroyed: false,
    errored: false,
    closed: false,
    closeEmitted: false,
    defaultEncoding: 'utf8',
    awaitDrainWriters: null,
    multiAwaitDrain: false,
    readingMore: false,
    decoder: null,
    encoding: null,
    [Symbol(kPaused)]: null
  },
  _events: [Object: null prototype] { prefinish: [Function: prefinish] },
  _eventsCount: 1,
  _maxListeners: undefined,
  _writableState: WritableState {
    objectMode: false,
    highWaterMark: 16384,
    finalCalled: false,
    needDrain: false,
    ending: false,
    ended: false,
    finished: false,
    destroyed: false,
    decodeStrings: true,
    defaultEncoding: 'utf8',
    length: 0,
    writing: false,
    corked: 0,
    sync: true,
    bufferProcessing: false,
    onwrite: [Function: bound onwrite],
    writecb: null,
    writelen: 0,
    afterWriteTickInfo: null,
    buffered: [],
    bufferedIndex: 0,
    allBuffers: true,
    allNoop: true,
    pendingcb: 0,
    prefinished: false,
    errorEmitted: false,
    emitClose: true,
    autoDestroy: true,
    errored: false,
    closed: false,
    closeEmitted: false
  },
  allowHalfOpen: true,
  [Symbol(kCapture)]: false,
  [Symbol(kCallback)]: null
}

标签: javascriptnode.jsamazon-web-servicesamazon-s3

解决方案


filePath提供了我们要保存从 S3 获得的文件的文件夹的路径,但我们没有在此处提供文件名

let file = fs.createWriteStream(localDest)

localDest应该是完整路径+文件名,目前它只提供完整路径


推荐阅读