簡體   English   中英

AWS Lambda / API網關上的文件編碼問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM