通过 AWS API Gateway 上传的 PDF 已损坏

2024-04-23

我正在尝试使用已部署到 AWS API 网关的 C# Web API 通过 Web 表单将 PDF 上传到 S3 存储桶中。

这是我的代码:

 private static IAmazonS3 s3Client;


        public static async Task<string> UploadS3FileAsync(string bucketName, IFormFile file, string keyName)  
        {
            try
            {  

                s3Client = new AmazonS3Client();      
                var fileTransferUtility =  new TransferUtility(s3Client);

                //Upload data from a type of System.IO.Stream.
                var stream = file.OpenReadStream();
                var length = (int)stream.Length;
                byte[] data = new byte[length];

                stream.Read(buffer: data, offset: 0, count: length);

               var fileTransferUtilityRequest = new TransferUtilityUploadRequest

                {
                    BucketName = bucketName,
                    InputStream = stream,
                    StorageClass = S3StorageClass.Standard,
                    ContentType = "application/pdf",
                    PartSize = 6291456, // 6 MB.
                    Key = keyName,
                    CannedACL = S3CannedACL.NoACL
                };

                await fileTransferUtility.UploadAsync(fileTransferUtilityRequest); 

                return "success";

            }
            catch (AmazonS3Exception e)
            {
                throw e;
                //Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                throw e;
                //Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }

        }

当我在本地运行该进程时,这工作得很好,但是当我将 API 部署到网关时,PDF 尽管上传到存储桶中,但已损坏并且比原始文件大。

我尝试过各种方法,例如在 API 网关上设置二进制媒体类型、创建流的各种类型。我确信这与编码有关,但我不确定下一步该去哪里。任何帮助将不胜感激。


这就是为我解决的:

https://github.com/aws/aws-lambda-dotnet/issues/635 https://github.com/aws/aws-lambda-dotnet/issues/635

  1. 在二进制媒体类型标题下的设置中创建一个条目multipart/form-data.
  2. 使用以下配置创建一个新模型。
{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "MediaFileUpload",
   "type": "object",
   "properties": {
   "file": { "type": "string" }
  }
}
  1. 修改方法请求步骤,添加在“请求正文”下添加一个条目,使用模型作为内容类型multipart/form-data.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AWS API Gateway 上传的 PDF 已损坏 的相关文章

随机推荐