c# - 使用 Flurl 将流响应发布和保存到文件的正确方法是什么
问题描述
我正在尝试实现一个异步 POST 文件并使用 Flurl 将响应直接读取到文件中。下面的代码工作正常,但不确定使用c.Result.CopyTo
or将流写入文件c.Result.CopyToAsync
?什么方法是正确的?
var result = new Url(url)
.WithHeader("Content-Type", "application/octet-stream")
.PostAsync(new FileContent(Conversion.SourceFile.FileInfo.ToString()))
.ReceiveStream().ContinueWith(c =>
{
using (var fileStream = File.Open(DestinationLocation + @"\result." + model.DestinationFileFormat, FileMode.Create))
{
c.Result.CopyTo(fileStream);
//c.Result.CopyToAsync(fileStream);
}
});
if (!result.Wait(model.Timeout * 1000))
throw new ApiException(ResponseMessageType.TimeOut);
解决方案
你当然可以CopyToAsync
在这里使用,但如果你避免使用 ,那会更干净,因为/被引入ContinueWith
后它通常没有那么有用。它还使处理 HTTP 流更清洁。我会用这样的东西:async
await
var request = url.WithHeader("Content-Type", "application/octet-stream");
var content = new FileContent(Conversion.SourceFile.FileInfo.ToString());
using (var httpStream = await request.PostAsync(content).ReceiveStream())
using (var fileStream = new FileStream(path, FileMode.CreateNew))
{
await httpStream.CopyToAsync(fileStream);
}
推荐阅读
- javascript - 输入生成意外的逗号作为值
- reactjs - Storybook 命名为默认导出
- firebase - 带有 FireStore 的 Flutter 聊天模块
- excel - 如何使用 VBA 和选择器将此网站的内容转换为 Excel?
- postgresql - 使用气流的 postgres 数据库获取应用程序数据
- numpy - 迭代数组列并垂直堆叠它们的最快方法
- reactjs - 在 React-css 中,Bootstrap 影响另一个类组件
- docker - docker run dynamodb-local on Github Actions Workflow 挂起
- netbeans - 从 Ant 切换到 Maven 时 Netbeans 中的问题
- python - Pyspark - 如何根据两条线的差异创建新线