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

AWS Lambda C# .NET Core:如何不存本地直接上传JPG至S3桶

解决AWS Lambda C# .NET Core无本地文件上传S3的问题

完全懂你的困扰!AWS Lambda的运行环境除了/tmp目录外都是只读的,所以直接写入本地文件肯定会触发"Read-only file system"错误。其实根本不需要保存文件到本地,我们可以直接把二进制数据放到内存流里,通过S3 SDK的InputStream属性完成上传,完美适配Lambda的环境。

修改后的代码示例

你只需要保留原来的十六进制转二进制逻辑,然后替换掉文件写入和FilePath的部分,改用MemoryStream:

// 保留你原有的十六进制字符串转二进制数组逻辑
int len = image.ImagePayload.Length;
byte[] bin = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
    bin[i / 2] = Convert.ToByte(image.ImagePayload.Substring(i, 2), 16);
}

// 核心修改:使用内存流替代本地文件
using (var imageStream = new MemoryStream(bin))
{
    var putObj = new PutObjectRequest
    {
        BucketName = input.Bucket,
        InputStream = imageStream, // 直接传入内存流
        ContentType = "image/jpg",
        Key = image.ImageName
    };

    // 建议使用await而非.Result,避免阻塞线程(Lambda环境更推荐异步操作)
    PutObjectResponse putResp = await S3Client.PutObjectAsync(putObj);
}

关键说明

  • 为什么这样可行:InputStream会直接读取内存中的数据流,不需要写入任何本地文件,完全规避了Lambda的只读文件系统限制。
  • using语句的作用:确保MemoryStream在使用后被正确释放,避免Lambda运行时出现内存泄漏问题。
  • 异步优化:把.Result改成await是Lambda的最佳实践,能更高效地利用运行时资源,避免不必要的线程阻塞。

这样修改后,部署到Lambda就能正常上传图片到S3啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:36:57