ファイルの変換/処理を行う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は自分の入力と同じですか?
私は同じ問題を抱えていますが、この問題を解決する運がありますか?ローカルでうまく動作しますが、AWS Lambdaではエラーが発生します。私はAWS Lambdaが何らかの理由でそれを暗号化していると思う – Mikes3ds