[英]Encoding issue with file on AWS Lambda/API Gateway
我正在生成一個REST API來執行一些文件轉換/處理。
我的Visual Studio 2015並構建在AWS無服務器核心 - ASP.Net核心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時,返回的文件大小只是原始文件的兩倍,當然表明存在編碼問題。
如果我傳遞帶有內容TEST
的ANSI文本文件,則保存的文件包含VEVTVA==
有人能指出我應該在哪里設置任何編碼設置和任何建議的設置,以確保我的HttpClient輸出流與我的輸入相同?
所以我也注意到了AWS ASP.Net核心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");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.