2017-07-11 25 views
2

ファイルの変換/処理を行うREST APIを作成しています。AWSラムダ/ APIゲートウェイのファイルにエンコーディングの問題があります

My Visual Studio 2015とAWS Serverless Core - ASP.Net Core Web APIテンプレートを使用して構築します。

私は初期のテスト方法をいくつか実行しており、エンコードの問題が発生していると思われます。

コントローラには次のものがあります。これは、単にメモリストリーム経由で投稿されたファイルをバイト配列にプルし、それを戻します。 (最終的なアプリケーションは、バイト配列を処理します)

[HttpPost] 
    public IActionResult Post(IFormFile file) 
    { 
     var inputStream = new MemoryStream(); 
     file.CopyTo(inputStream); 

     var fileBytes = inputStream.ToArray(); 

     var outputStream = new MemoryStream(fileBytes); 

     return File(outputStream, "application/octet-stream"); 
    } 

私はその後、私はこのコントローラにファイルを渡すとリターンを保存するために使用しているテスト・アプリケーションを持っています。

 using (var client = new HttpClient()) 
     { 
      using (var content = new MultipartFormDataContent()) 
      { 
       var inputFileStream = new FileStream(Server.MapPath("~/App_Data/InputFile.pdf"), FileMode.Open, FileAccess.Read); 
       var inputFileBytes = new Byte[inputFileStream.Length]; 
       inputFileStream.Read(inputFileBytes, 0, inputFileBytes.Length); 
       inputFileStream.Close(); 

       content.Add(new ByteArrayContent(inputFileBytes), "file", "InputFile.pdf"); 

       var requestUri = "http://localhost:5000/api/controller"; 
       //var requestUri = "https://xxxxxxxxxx.execute-api.eu-west-1.amazonaws.com/Prod/api/controller"; 

       var result = client.PostAsync(requestUri, content).Result; 
       var resultStream = result.Content.ReadAsStreamAsync().Result; 

       var memoryStream = new MemoryStream(); 
       resultStream.CopyTo(memoryStream); 

       var outputFileBytes = memoryStream.ToArray(); 
       FileStream outputFileStream = new FileStream(Server.MapPath("~/App_Data/OutputFile.pdf"), FileMode.Create, FileAccess.ReadWrite); 
       outputFileStream.Write(outputFileBytes, 0, outputFileBytes.Length); 
       outputFileStream.Close(); 
      } 
     } 

localhostアプリケーションを使用して実行すると、重複したファイルが保存されます。ただし、APIをAWSに公開すると、返されるファイルのサイズは元のサイズに比べて2倍になり、エンコードの問題が明らかです。

私は内容TESTとANSIテキストファイルを渡す場合は、保存されたファイルはVEVTVA==

が含まれている誰かが、私は私からその出力ストリームを確保するために、任意のエンコード設定し、任意の推奨設定を設定すべき場所で私を指すことができますHttpClientは自分の入力と同じですか?

+0

私は同じ問題を抱えていますが、この問題を解決する運がありますか?ローカルでうまく動作しますが、AWS Lambdaではエラーが発生します。私はAWS Lambdaが何らかの理由でそれを暗号化していると思う – Mikes3ds

答えて

0

私はこれもAWS ASP.Net Core Web APIに気付きました。 MIMEタイプをapplication/octet-streamからapplication/textに変更しました。これはAWSで修正されたようです。

[HttpPost] 
    public IActionResult Post(IFormFile file) 
    { 
     var inputStream = new MemoryStream(); 
     file.CopyTo(inputStream); 

     var fileBytes = inputStream.ToArray(); 

     var outputStream = new MemoryStream(fileBytes); 

     return File(outputStream, "application/text"); 
    } 
関連する問題