.net Webclient未下载映像

ckx4rj1h  于 2023-05-08  发布在  .NET
关注(0)|答案(2)|浏览(150)

我正在使用C# Webclient下载一个图像,但有一个问题,因为图像是0 kb。
在这个过程中我没有收到错误消息。
有人能帮帮我吗
谢谢你

private static void Download(string _caminhoArquivo, string _nomeArquivo)
        {
            try
            {
                using (WebClient client = new WebClient())
                {
                    string _arquivodownl = "C:\\Img\\ImagensMensagens\\" + _nomeArquivo;
                    string url = "https://p2.trrsf.com/image/fget/cf/940/0/images.terra.com/2020/10/16/2020-10-16T140412Z_1_LYNXMPEG9F1AV_RTROPTP_4_BRAZIL-POLITICS.JPG";
                    client.DownloadFileAsync(new Uri(url), _arquivodownl);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
eimct9ow

eimct9ow1#

你正在调用DownloadFileAsync,这是一个非阻塞方法,这意味着它将在文件完全下载之前完成。
你有两个选择:
1-将代码更改为同步:

client.DownloadFile(new Uri(url), _arquivodownl);

这样,该函数将在下载文件后完成。
2-Hook到DownloadFileCompleted事件:

client.DownloadFileCompleted += (o, e) => { /* Process here the file */ }
 client.DownloadFileAsync(new Uri(url), _arquivodownl);

这将在文件下载完成后引发事件DownloadFileCompleted *。你可以把事件挂接到一个函数上,我把它挂接到一个lambda函数上只是一个例子。另外,您应该检查e.Cancellede.Error以确保下载成功。
第二种方法的好处是不会阻止应用程序等待下载结束。
此外,如果使用第二种方法,则必须删除using,否则将在下载文件之前处理WebClient

yxyvkwin

yxyvkwin2#

你可能需要在你的webclient示例中分配一个用户代理,这样你就不会被你请求图像的服务器阻止或拒绝回复。
“Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299”
这是用户代理值,适用于我的情况,因为一些服务器甚至不回复,如果他们没有找到“边缘...”在您的用户代理参数。
在这里看到我的特殊问题…使用WebClient为什么无法下载以下图像链接?我不想使用WebClient以外的任何东西

相关问题