AWS Lambda / API网关上的文件编码问题

时间:2017-07-11 18:18:16

标签: c# rest encoding aws-lambda

我正在制作一个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的输出流与我的输入相同吗?

1 个答案:

答案 0 :(得分:1)

所以我也注意到了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");
    }