Why does AWS Lambda not upload images to S3 properly in .NET?

Issue

This Content is from Stack Overflow. Question asked by first last

I’m having an issue with .NET 6 framework regarding the uploading of image files to S3 using the AWS SDK.

When I POST to my endpoint running on a local IIES it works perfectly and I can see the generated file in S3 without any issues.

The problem is the following: After a serverless deployment to AWS Lambda, the same .NET Core endpoint that produced a perfect result in my local environment behaves way different when it’s running on a lambda. when I try to open the image it shows a square dot at the center but no image.

I am using IFormFile and here is my code

 public async Task<string> Upload(IFormFile formfile, string name)
        {
            var xbuilder = WebApplication.CreateBuilder();
            var _AwsSetting = xbuilder.Configuration.GetSection("AwsCredentials").Get<AWSCredentials>();

            var accessKey = _AwsSetting.AWSAccessKey;
            var secretKey = _AwsSetting.AWSSecretAccessKey;
            RegionEndpoint bucketRegion = RegionEndpoint.APSouth1;
            var bucketName = _AwsSetting.AWSS3BucketName;
            var location = $"{name + Path.GetExtension(formfile.FileName)}";
            var contentType = formfile.ContentType;
            var client = new AmazonS3Client(accessKey, secretKey, bucketRegion);
           
            try
            {
                using (var stream = new MemoryStream())
                {
                   await formfile.CopyToAsync(stream);

                        var putRequest = new PutObjectRequest()
                        {

                            Key = location,
                            BucketName = bucketName,
                            InputStream = stream,
                            CannedACL = S3CannedACL.PublicRead,
                            ContentType=contentType

                        };
                        await client.PutObjectAsync(putRequest);
                        string publicUrl = string.Empty;
                        publicUrl = $"https://{bucketName}.s3.{bucketRegion.SystemName}.amazonaws.com/{location}";
                        return publicUrl;
                }
            }
            catch (Exception e)
            {
                throw e;
            }

        }



Solution

Check the Answers

This Question and Answer are collected from stackoverflow and tested by JTuto community, is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?