【发布时间】:2021-08-26 20:34:23
【问题描述】:
我正在使用 CopyToAsync 将图像下载到本地服务器。下载后,我必须使用 FluentFTP 将文件上传到另一个网络服务器。
我下载图片的代码是:
public static async Task DownloadImage(Entity.LoginResult loginResult, string saveFolder, string image, string saveFile)
{
string filename = System.IO.Path.GetFileNameWithoutExtension(saveFile);
string extension = System.IO.Path.GetExtension(saveFile);
{
saveFile = GetValidUrlString(filename, "-", 255) + extension;
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("GET"), apiUrl + image + "/download"))
{
request.Headers.TryAddWithoutValidation("Authorization", "CBX-SIMPLE-TOKEN Token=" + loginResult.token);
var response = httpClient.SendAsync(request).Result;
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
using (var fs = new FileStream(saveFolder + saveFile, FileMode.Create))
{
await response.Content.CopyToAsync(fs);
}
}
}
}
}
}
调用 DownloadImage 后,我想检查文件是否已下载,如下所示:
if (System.IO.File.Exists(saveFolder + media.filename))
{ Call ftp }
在 ftp 传输图像时出现以下错误
- 图像未下载(System.IO.File.Exist = False)
- 映像正在处理中,由于文件正在使用,FTP 失败。
谁能告诉我如何使用 async/await 以便下载和上传都完成
【问题讨论】:
-
response.StatusCode 的值是多少?
-
只有在 System.Net.HttpStatusCode.OK (if (response.StatusCode == System.Net.HttpStatusCode.OK)) 时才会进展
-
您似乎没有在等待此任务。为什么不让
DownloadImage至少返回一个bool值,以表明它成功或失败(因此,将返回类型更改为Task<bool>)。 -- 你从哪里调用这个方法?您可以发布该代码吗? -- 这是什么类型的应用程序? -
继@Jimi 的评论之后,您应该这样做
var response = await httpClient.SendAsync(request);
标签: c# asynchronous async-await