【问题标题】:Using HttpClient to POST files to Azure logic app -- but resulting email attachment is always corrupted使用 HttpClient 将文件 POST 到 Azure 逻辑应用程序——但生成的电子邮件附件总是损坏
【发布时间】:2021-07-14 13:49:55
【问题描述】:

我有一个逻辑应用,它有一个 HTTP POST 请求作为触发器(我还没有为此设置架构或示例有效负载)。然后,逻辑应用会发送一封带有附件的电子邮件,该附件应该是多部分/表单数据上传中的第一项。

来自我的控制台应用程序的代码:

var form = new MultipartFormDataContent();
 
var bytes = ExcelBuilder.SaveData()

var fileContent = new ByteArrayContent(bytes, 0, bytes.Length);

fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
fileContent.Headers.Add("Content-Disposition", $"form-data; name=\"test\"; filename=\"test.xlsx\"");

form.Add(fileContent, "test", "test.xlsx")

var response = await httpClient.PostAsync(logicAppUri, form)

我的方法中创建字节数组的代码(使用 ClosedXML):

public byte[] SaveData()
{
   IXLWorkbook workbook = new XLWorkbook();

   var stream = new MemoryStream();
   workbook.SaveAs(stream)
   stream.Position = 0;

   return stream.ToArray();
}

我尝试过的事情:

  1. 当我使用硬编码文件路径、调用 workbook.SaveAs(string path),然后调用 File.ReadAllBytes(string path) 时,一切正常。最后将其保存到 ByteArrayContent。我收到一个可读的 Excel 文件作为附件。
  2. 仅读取 MemoryStream(没有 .ToArray(),并且在返回之前将 Position 设置为 0),将该流传递到 StreamContent 构造函数中,而让其他所有内容保持不变并没有帮助。附件最终仍然无法读取和损坏。
  3. ClosedXML 在控制台中仍然可以读取流。我可以在我的主课中创建和阅读一个新的工作簿。数据也保持不变。
  4. 使用 Path.GetTempPath + "test.xlsx" 并在该位置使用 FileStream 也会导致附件损坏。

电子邮件本身发送良好,没有抛出任何错误,逻辑应用程序中的 HTTP Post 输出几乎相同。请求的 $content 部分也不为空,实际上它们具有几乎相同的内容,除了在损坏的版本中有一些不同的字符(例如 $content 是 UAAAAI34IANFJDJF... 在可读运行中,但 UAAAAJ25IANFJFJF ...在不可读的运行中)。附件本身大小相同,名称相同。只是不可读的版本无法在Excel中打开

我不应该在本地保存 Excel 文件,所以我使用的是流。本地保存是我能够做到这一点的唯一方法吗?这是我第一次使用流,所以我怀疑我在那里做错了什么,但我不太确定,我一直陷入死胡同。任何建议将不胜感激!

【问题讨论】:

    标签: c# stream httpclient azure-logic-apps


    【解决方案1】:

    想通了!在我的代码中拼错了 xlsx 扩展名(添加到 MultipartFormDataContent 时),这让一切都失败了。现在它工作得很好:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 2022-01-19
      • 2011-04-04
      • 2020-09-07
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多