PDF загружен через AWS API-шлюз поврежден - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь загрузить PDF через веб-форму в корзину S3 с помощью C# веб-API, который я развернул на шлюзе AWS API.

Вот мой код:

 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, различные типы создания потока. Я уверен, что это как-то связано с кодированием, но я не уверен, где go дальше. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 18 января 2020

Настроили ли вы «Двоичные типы носителей» на вкладке настроек?

Шлюз API по умолчанию рассматривает всю полезную нагрузку запроса как текстовые данные, то есть недвоичные данные, и выполняет кодирование base64 на полезная нагрузка. Файл PDF большего размера должен быть файлом, содержащим версию исходного PDF в кодировке base64.

Ссылка: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...