首页 > 解决方案 > 使用 Flurl 将流响应发布和保存到文件的正确方法是什么

问题描述

我正在尝试实现一个异步 POST 文件并使用 Flurl 将响应直接读取到文件中。下面的代码工作正常,但不确定使用c.Result.CopyToor将流写入文件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);

标签: c#flurl

解决方案


你当然可以CopyToAsync在这里使用,但如果你避免使用 ,那会更干净,因为/被引入ContinueWith后它通常没有那么有用。它还使处理 HTTP 流更清洁。我会用这样的东西:asyncawait

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);
}

推荐阅读