C# WebClient DownloadFile方法下载损坏的PDF文件
在我的Windows应用程序中,我使用WebClient DownloadFile方法从本地网络上的服务器下载几个PDF文件 每个文件都是在调用其URL时生成的报告。报告大小不同,生成时间也不同 我的代码在大约400个URL的列表中循环,对于每个URL,它调用DownloadFile方法,并生成相应的报告并下载到本地机器。URL绝对正确 问题是,几乎每次应用程序运行时,一些下载的文件都会被损坏,只下载了7KBs。我认为这是元数据,Acrobat Reader在我尝试打开文件时会给我一条消息: “…它不是受支持的文件类型,或者因为文件已损坏…” 损坏的文件并不总是相同的,当我重新运行应用程序时,这些文件通常会成功,而其他一些文件可能会失败……这似乎是随机的,我无法找到标准 注1:我不希望文件在其优先级完全下载之前开始下载,这就是我不使用异步方法的原因。 注2:所有文件都是Oracle报告,通过查询数据库生成。 注意3:如果文件损坏,则不会引发异常 这是我的密码:C# WebClient DownloadFile方法下载损坏的PDF文件,c#,webclient,downloadfile,C#,Webclient,Downloadfile,在我的Windows应用程序中,我使用WebClient DownloadFile方法从本地网络上的服务器下载几个PDF文件 每个文件都是在调用其URL时生成的报告。报告大小不同,生成时间也不同 我的代码在大约400个URL的列表中循环,对于每个URL,它调用DownloadFile方法,并生成相应的报告并下载到本地机器。URL绝对正确 问题是,几乎每次应用程序运行时,一些下载的文件都会被损坏,只下载了7KBs。我认为这是元数据,Acrobat Reader在我尝试打开文件时会给我一条消息: “
using ( WebClient client = new WebClient() )
{
for(int i=0; i< URL_List.Length; i++)
{
try
{
client.DownloadFile( URL_List[i] , myLocalPath+fileName+".pdf" );
}
catch(Exception x)
{
// write exception message to error log...
}
}
}
提前谢谢 在服务器上,您是否可以将发送给客户端的内容保存到文件中,以确认这是客户端问题而不是服务器问题?@MattHouser:您的意思是,在调用DownloadFile方法之前,我应该将生成的报告保存到服务器,以确保生成成功?正确。隔离问题。确认PDF是否已正确创建。如果问题是服务器正在生成损坏的PDF,那么调试客户端将浪费时间。此外,如果您使用标准web浏览器访问PDF的URL,文件下载是否正确?当我使用浏览器调用URL时,它会返回正确的PDF文件。我不知道按顺序生成大量报告是否会导致服务器出现问题。无论如何,我已经声明,损坏的文件是随机的!并且重新运行应用程序通常可以正常工作。损坏的文件通常会被正确的文件替换。作为测试,我会按照你说的做,并会反馈。非常感谢你,先生,亲爱的马特,你说得对。我记得当Oracle report失败时,它会在HTML页面而不是PDF内容中返回错误消息,因此我将受损文件的扩展名更改为HTML,并在浏览器中打开它们。内容是从Oracle报告返回的错误消息。。。我尚未检查该问题,但至少现在我知道这是服务器端问题:。非常感谢你的帮助。