c# - 下载后处理图片
问题描述
我使用 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 以便下载和上传都完成
解决方案
将线路更改
var response = httpClient.SendAsync(request).Result;
为var response = await httpClient.SendAsync(request);
在我目前正在工作的公司中,.Result
有时这样的任务无法正常工作。如果下载失败,抛出。
if (response.StatusCode != System.Net.HttpStatusCode.OK) { throw new Exception("download failed"). }
为确保下载发生,您需要像这样使用 await 调用它
await DownloadImage(params)
好的做法是“一次异步,全部异步”。这意味着当您使用一个异步时,您的所有代码都应该是异步的。
推荐阅读
- javascript - 单节点图对 forceCenter 没有反应?
- django - 如何自定义 url 输出?
- javascript - 如果 ajax 失败,请更新设置并重试
- android - 无法使用 android 中的包将下载的数据从活动传输到片段
- arrays - 计算数组和无限子数组中的所有对象
- prestashop - 如何在prestashop的前端隐藏产品
- batch-file - 使用批处理文件将文件从 filezilla 传输到本地路径 C:\
- java - 尝试在空对象引用上调用虚拟方法 void android.widget.ImageView.startAnimation
- jquery - 检查所有子元素是否有 display:none
- python - 将基序映射回参考序列中的多个位点