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