【问题标题】:AWS Lambda image/pdf upload to S3 is corrupted (asp.net core)AWS Lambda 图像/pdf 上传到 S3 已损坏(asp.net 核心)
【发布时间】:2022-08-17 08:52:49
【问题描述】:

我编写了一个在 s3 存储桶中上传文件的函数。当我在本地运行我的应用程序时它工作正常。

但是当我在 AWS Lambda 中部署应用程序时,文件上传工作正常,但文件已损坏。上传的文件大小略高于实际文件大小。

txt 文件上传工作正常。

这是我的代码

                Guid guid = Guid.NewGuid();
                string extension = System.IO.Path.GetExtension(logo.FileName);
                var fileName = $\"{guid}{extension}\";
                using (var ms = new System.IO.MemoryStream())
                {
                    logo.CopyTo(ms);
                    ms.Position = 0;
                    System.IO.Stream stream = ms;
                    var client = new AmazonS3Client(AppConstants.S3AccessKey, AppConstants.S3SecretKey, Amazon.RegionEndpoint.USEast1);
                    PutObjectRequest putRequest = new PutObjectRequest
                    {
                        BucketName = AppConstants.S3Bucket,
                        Key = fileName,
                        InputStream = stream
                    };

                    PutObjectResponse response = await client.PutObjectAsync(putRequest);
                }

我已经配置了API Gateway for binary data 并使用以下代码更改了 LambdaEntryPoint

 RegisterResponseContentEncodingForContentType(\"multipart/form-data\", ResponseContentEncoding.Base64);

还有其他我错过的配置吗?

  • 据我所知,AWS 建议使用预签名 URL 进行此类操作。你不能使用它们吗?此外,base64 也可能已损坏,可能会添加二进制媒体类型/到网关可以解决这个问题吗?

标签: amazon-s3 file-upload aws-lambda aws-sdk asp.net-core-3.1


【解决方案1】:

我认为您没有显示您编写的完整代码。我昨天有同样的问题。

我使用System.Drawing.Image 命名空间来存储图像,然后我正在调整它的大小。 System.Drawing.Image 的问题在于它仅在 Windows 平台上受支持。这就是它在本地机器上工作的原因。

这就是我解决这个问题的方法: 我必须安装一个名为ImageSharp 的第三方库。代码如下:

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Formats.Png;
public class Function
{
 public MemoryStream GetReducedImage(int width, int height, MemoryStream resourceImage)
 {
    try
    {
        using (var image = Image.Load(resourceImage))
        {
            image.Mutate(x => x.Resize(width, height));
            var ms = new MemoryStream();
            image.Save(ms, new PngEncoder());
            ms.Position = 0;
            return ms;
        }
    }
    catch (Exception e)
    {
        return null;
    }
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-14
    • 2021-03-15
    • 2020-04-15
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多