OpenXML Excel本地环境与AWS Lambda

时间:2018-02-02 21:48:05

标签: aws-lambda openxml openxml-sdk

在本地环境(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()

我可以将excel发布到AWS上,(甚至可以使用系统io读取它),但是SpreedsheetDocument.Open的方法无法正常工作。 (还检查了我可以将文本文件写入临时目录,似乎也可以工作)

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

2 个答案:

答案 0 :(得分:0)

检查您尝试打开的Excel文件是否受密码保护。如果是,请删除密码保护,重新保存并尝试再次读取该文件。

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

答案 1 :(得分:0)

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