如何将Cosmos DB生成的制表符分隔文件发送至Logic App?
解决Logic App接收制表符分隔文件附件的问题
你当前代码的核心问题是错误地将FileStreamResult对象传入StringContent,这完全不符合HTTP上传文件的规范。要让Logic App正确识别并处理文件附件,需要使用**多部分表单数据(MultipartFormDataContent)**来封装文件内容,而不是直接传递字符串。
修改后的完整代码
string query = $"Select * from c"; var restrictions = await _cosmosService.QueryItemsAsync<Data>(Database, query); if (restrictions == null) return new NoContentResult(); // 生成制表符分隔文本 string tabDelimitedText = ConvertToTabDelimited(restrictions); byte[] tabDelimitedBytes = System.Text.Encoding.UTF8.GetBytes(tabDelimitedText); // 准备多部分表单内容,用于上传文件 using var formContent = new MultipartFormDataContent(); // 添加文件:参数名(需和Logic App触发器配置匹配)、文件名、文件字节内容 formContent.Add(new ByteArrayContent(tabDelimitedBytes), "file", "data.tsv"); // 发送请求到Logic App的触发器URL await _client.PostAsync(EmailTriggerUrl, formContent); // 保留原接口返回逻辑(如果需要) using var stream = new MemoryStream(tabDelimitedBytes); return new FileStreamResult(stream, "text/tab-separated-values") { FileDownloadName = "data.tsv" }; // 制表符文本转换方法(根据实际Data实体调整字段) private string ConvertToTabDelimited(List<Data> dataList) { using var textWriter = new StringWriter(); // 写入表头 textWriter.WriteLine("Field1\tField2\tField3"); foreach (var item in dataList) { textWriter.WriteLine($"{item.Field1}\t{item.Field2}\t{item.Field3}"); } return textWriter.ToString(); }
关键修改说明
- 替换
StringContent为MultipartFormDataContent:这是HTTP上传文件的标准格式,Logic App的HTTP触发器可直接解析这种格式的文件附件。 - 表单字段名匹配:
formContent.Add中的第二个参数"file",需要和你Logic App HTTP触发器中配置的文件输入参数名完全一致,否则Logic App无法识别文件。 - 规范文件名和媒体类型:使用
.tsv后缀明确标识制表符分隔文件,媒体类型text/tab-separated-values比text/plain更准确,便于后续邮件附件处理。
额外注意事项
- 确保Logic App的HTTP触发器已启用允许文件上传,或配置为接收
multipart/form-data类型的请求。 - 检查
ConvertToTabDelimited方法的参数类型,需和QueryItemsAsync返回的restrictions类型匹配,避免类型转换错误。
内容的提问来源于stack exchange,提问作者Owen
相关产品推荐
相关产品推荐

