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

使用ballerinax/aws.s3处理AWS S3大文件时遇连接关闭错误

Ballerina AWS S3客户端侧大文件复制连接超时问题排查与解决

我使用Ballerina的s3->getObject和s3->createObject通过流执行客户端侧S3文件复制,小文件能正常处理,但处理大文件时,约1分钟后连接会关闭,抛出错误:

error: Connection between client and remote host is closed

尝试调整客户端配置的timeout参数(设为0),但完全没有效果。

示例代码:

import ballerinax/aws.s3;
import ballerina/io;

public function main() returns error? {

    s3:Client 'client = check new ({
        accessKeyId: "xxx",
        secretAccessKey: "xxx",
        region: "ap-southeast-2",
        timeout: 0
    });

    stream<byte[], io:Error?> s = check 'client->getObject("xxx", "xxx");

    var s1 = stream from var x in s
        select x.cloneReadOnly();    // 有没有更好的方法?将byte[]流转换为块流

    check 'client->createObject("xxx", "xxx", s1);
    io:println("completed");
}

问题原因与解决方案

1. 修正HTTP连接超时配置

你设置的顶层timeout是客户端整体超时,而大文件流复制时的连接关闭,本质是HTTP请求级别的空闲/读取超时。需要通过httpClientConfig单独配置底层HTTP客户端的超时参数:

s3:Client 'client = check new ({
    accessKeyId: "xxx",
    secretAccessKey: "xxx",
    region: "ap-southeast-2",
    httpClientConfig: {
        idleTimeout: 3600,  // 连接空闲时保持打开的时长,单位秒,按需调整
        readTimeout: 3600,  // 读取响应数据的最大等待时间
        connectTimeout: 60   // 初始连接超时,保持默认即可
    }
});

这两个参数是大文件流处理的关键,替换你原来的timeout配置即可解决连接提前关闭的问题。

2. 移除不必要的流克隆操作

代码中的cloneReadOnly()完全多余,getObject返回的stream<byte[], io:Error?>可以直接传给createObject——createObject接收的输入流类型就是stream<byte[], error?>,直接使用原流即可:

stream<byte[], io:Error?> s = check 'client->getObject("source-bucket", "source-key");
check 'client->createObject("target-bucket", "target-key", s);

移除克隆能减少内存开销和处理延迟,提升大文件复制的稳定性。

3. 优先使用S3服务端复制(推荐)

客户端侧复制需要本地中转数据,效率低且易受网络波动影响。如果源文件和目标文件在同一AWS区域,强烈建议使用S3服务端复制API(copyObject),由AWS内部处理数据传输:

check 'client->copyObject(
    "target-bucket", 
    "target-key", 
    "source-bucket/source-key"  // 源对象格式:bucket名称/对象key
);

服务端复制不仅避免了客户端超时问题,速度更快,还能节省本地带宽和资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:35:25