You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js调用MinIO的getObject方法无法从返回流中获取数据如何解决

问题根因
  • 流读取是异步事件驱动逻辑:await minioClient.getObject()仅能等待流对象返回,不会等待流的data、end回调执行完成,你的代码在流还没读完数据的时候就已经执行了后续的console.log("Buffer = " + buff)和return操作,此时buff还是空数组。
  • 异步函数未正确接收返回值:call是async异步函数,直接调用返回的是Promise对象,必须通过await或者.then()才能拿到实际返回结果。
修复代码

把流读取逻辑封装为Promise,确保等待流完全读完再返回结果:

var Minio = require('minio')
var Buffer = require('buffer').Buffer;

async function call(){
    var minioClient = new Minio.Client({
        endPoint: 'localhost',
        port: 9000,
        useSSL: false,
        accessKey: 'admin',
        secretKey: 'password'
    });

    minioClient.listBuckets(function (err, buckets) {
        if (err)
            return console.log(err);
        console.log('buckets :', buckets);
    });

    // 封装流读取为Promise,等待读取完成
    const fileBuffer = await new Promise((resolve, reject) => {
        let buff = [];
        let size = 0;
        minioClient.getObject("test2", "test.jpg").then(dataStream => {
            dataStream.on('data', chunk => {
                buff.push(chunk)
                size += chunk.length
            })
            dataStream.on('end', () => {
                console.log('End. Total size = ' + size)
                // 拼接为完整Buffer返回
                const fullBuffer = Buffer.concat(buff, size)
                resolve(fullBuffer)
            })
            dataStream.on('error', err => {
                console.log(err)
                reject(err)
            })
        }).catch(err => {
            console.log(err)
            reject(err)
        })
    })
    
    console.log("Buffer length = " + fileBuffer.length);
    return fileBuffer;
}

// 异步调用必须加await,外层如果是全局可以用自执行async函数
;(async () => {
    var data = await call();
    console.log("Data length: " + data.length);
    // 后续要处理图片可以直接用这个Buffer
})()
补充说明

如果需要直接把文件保存到本地,也可以直接用MinIO SDK提供的fGetObject方法,不用手动处理流拼接,更简单。

内容的提问来源于stack exchange,提问作者George V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:15:02