我正在使用.NET Core使用AWS Lambda构建Web API。
我遇到了一个问题,下面的代码片段在我的Windows机器上按预期工作(回显图像),但是当部署到AWS Lambda时,返回的图像被破坏了。经过进一步调查后,回传文件的大小几乎是部署在AWS上时发送文件大小的两倍?
[HttpPost]
public async Task<IActionResult> Post(IFormFile file)
{
using (var tmpStream = new MemoryStream())
{
await file.CopyToAsync(tmpStream);
var fileExtension = Path.GetExtension(file.FileName);
return File(tmpStream.ToArray(), file.ContentType);
}
}
我错过了一些配置还是忽略了什么? AWS Gateway ??
(我正在通过Postman测试这个问题)
答案 0 :(得分:2)
如果有人在寻找解决方案,除了在API Gateway设置中添加“ multipart / form-data”作为二进制媒体类型外,您还需要在资源的方法请求主体中添加模型。
有关详细信息,请访问https://github.com/aws/aws-lambda-dotnet/issues/635#issuecomment-616226910
步骤:
public class LambdaEntryPoint : APIGatewayProxyFunction
{
/// <summary>
/// The builder has configuration, logging and Amazon API Gateway already configured. The startup class
/// needs to be configured in this method using the UseStartup<>() method.
/// </summary>
/// <param name="builder"></param>
protected override void Init(IWebHostBuilder builder)
{
RegisterResponseContentEncodingForContentType("multipart/form-data", ResponseContentEncoding.Base64);
builder.UseStartup<Startup>();
}
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "MediaFileUpload",
"type": "object",
"properties": {
"file": { "type": "string" }
}
}
编辑:添加了代码,并为清晰起见采取了其他步骤,如@JeremyCaney所述
答案 1 :(得分:1)
你看过文件的内容了吗?我的猜测是html错误结果或其他什么。
在这篇博文(Serverless ASP.NET Core 2.0 Applications)中,他们提到:
如果您的网络应用程序显示图像,我们建议您从Amazon S3提供这些图像。这对于返回静态内容(如图像,层叠样式表等)更有效。此外,将图像从Lambda函数返回到浏览器,您需要在API Gateway for binary data中执行额外配置。
请参阅API Gateway for binary data了解如何配置。
答案 2 :(得分:0)
在 AWS API Gateway 的设置部分添加 BinaryMediaTypes "multipart/form-data"。部署Api(如果之前做过,改设置后再做一次)