在AWS Lambda中获得“内部流位置意外更改”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AWS Lambda中获得“内部流位置意外更改”相关的知识,希望对你有一定的参考价值。
我正在ASP.Net核心实现文件上传。在Windows上进行本地测试时,一切正常,但是当我在AWS Lambda上部署代码时,我得到了
“System.InvalidOperationException:内部流位置已意外更改。在Microsoft.AspNetCore.Http.InternalReadStad.VerifyPosition()处于Microsoft.AspNetCore.Http.Internal.ReferenceReadStream.Read(Byte []缓冲区,Int32偏移量,Int32计数)在System.IO.Stream.CopyTo(Stream destination,Int32 bufferSize)“
我的代码:
[HttpPost]
[Route("")]
[Authorize]
public IActionResult Store([FromForm] MyFiles files)
{
var stream1 = files.File1.OpenReadStream();
var stream2 = files.File2.OpenReadStream();
string result;
using (MemoryStream ms = new MemoryStream())
{
stream1.CopyTo(ms);
ms.Position = 0;
result= GetCrcForFile(ms);
}
}
public class MyFiles
{
public IFormFile File1 { get; set; }
public IFormFile File2 { get; set; }
}
public string GetCrcForFile(Stream result)
{
uint crc = 0;
using (MemoryStream ms = new MemoryStream())
{
result.CopyTo(ms);
var bytes = ms.ToArray();
crc = Crc32Algorithm.Compute(bytes);
return crc.ToString("X");
}
}
例外情况发生在result.CopyTo(ms);
线上
我不确定.Net Core是否在Linux环境或AWS Lambda问题上表现不同,或者我做错了什么。
答案
如in this issue所示,根据您使用的服务器类型,您无法以任何顺序访问文件流。您需要按顺序打开和处理文件,否则您将收到“内部流位置意外更改”异常。
因此,请确保:
- 在
OpenReadStream
上调用File1
,然后完全处理文件的内容 - 只有这样,在
OpenReadStream
上调用File2
,依此类推
以上是关于在AWS Lambda中获得“内部流位置意外更改”的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 中的 Firebase 实时数据库查询未获得最新结果
有啥方法可以在 AWS Lambda 中获取 Cognito 用户名?