OpenXML Excel 本地环境与 AWS Lambda

OpenXML Excel Local Environment vs AWS Lambda

在本地环境中(Windows 7、Kestrel、AspNetCore 2.0)一切正常,没有错误。但是,当我使用 API 网关作为 LAMBDA 函数部署到 AWS 时,出现以下错误。

    [HttpPost]
    [Route("Temp")]
    public IActionResult PostTest(IFormFile file)
    {
        using (SpreadsheetDocument document = SpreadsheetDocument.Open(file.OpenReadStream(), false))
        {
        }
        return Ok();
    }

Unknown error responding to request: FileFormatException:
System.IO.FileFormatException: File contains corrupted data.
at System.IO.Packaging.ZipPackage..ctor(Stream s, FileMode packageFileMode, FileAccess packageFileAccess)
at System.IO.Packaging.Package.Open(Stream stream, FileMode packageMode, FileAccess packageAccess)
at DocumentFormat.OpenXml.Packaging.OpenXmlPackage.OpenCore(Stream stream, Boolean readWriteMode)
at DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(Stream stream, Boolean isEditable, OpenSettings openSettings)
at api.Controllers.SKUController.Post2Async(IFormFile file) in \lambda\api\Controllers\SKUController.cs:line 72
at lambda_method(Closure , Object , Object[] )
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()

我能够 post excel 对 AWS 来说很好,(甚至使用系统 io 读取它)但是 SpreedsheetDocument.Open 的方法不起作用。 (还检查了我是否可以将文本文件写入似乎也可以工作的临时目录)

  1. Microsoft.AspNetCore.All 2.0.3 & NETStandard.Library 2.0.1
  2. System.IO.Packaging 4.4.1
  3. DocumentFormat.OpenXml 2.8.1

检查您尝试打开的 excel 文件是否受密码保护。如果是,解除密码保护,重新保存,再尝试读取文件。

我发现 an MSDN post 用户遇到了同样的错误。经过他们的研究,确定 File contains corrupted data. 异常可能是由使用 OpenXml 读取受密码保护的 excel 2007 文件引起的。

原来 API 网关将其编码为 base64,它需要以二进制形式传递而不是编码。我忘记做的一件事是部署它 API 网关。