C# 用C语言从PHP页面下载文件#
好的,我们有一个PHP脚本,它从一个文件创建一个下载链接,我们希望通过C#下载该文件。这在progress等中可以正常工作,但是当PHP页面出现错误时,程序会下载错误页面并将其保存为请求的文件。这是我们的atm代码: PHP代码:C# 用C语言从PHP页面下载文件#,c#,php,C#,Php,好的,我们有一个PHP脚本,它从一个文件创建一个下载链接,我们希望通过C#下载该文件。这在progress等中可以正常工作,但是当PHP页面出现错误时,程序会下载错误页面并将其保存为请求的文件。这是我们的atm代码: PHP代码: <?php $path = 'upload/test.rar'; if (file_exists($path)) { $mm_type="application/octet-stream"; header("Pragma
<?php
$path = 'upload/test.rar';
if (file_exists($path)) {
$mm_type="application/octet-stream";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($path)) );
header('Content-Disposition: attachment; filename="'.basename($path).'"');
header("Content-Transfer-Encoding: binary\n");
readfile($path);
exit();
}
else {
print 'Sorry, we could not find requested download file.';
}
?>
您应该使用PHP中的
Header
函数,而不是打印错误消息
由于异步调用的性质,不会引发WebException
。在DownloadFileCompleted回调中,您可以检查
if(e.Error != null)
您的e.Error将包含一行类似于
“远程服务器返回错误:(404)找不到。”
您需要通知webclient,设置标题时会发生错误,就像成功下载时一样。我不太熟悉PHP,但找到了一个401示例
header('HTTP/1.0 401 Unauthorized', true, 401);
从是否无法获得类似的内容,获取自定义打印消息,而不是显示默认的异常标题?因为我们将植入更多的自定义异常。您的状态消息和您尝试传输的数据之间可能会发生冲突。通过标题应该可以保证
WebException
,然后您可能会有第二个header
调用来设置消息?嗯,您能给我举个例子吗?我以前从未这样做过:(.很遗憾,我也是,但根据文档,您的WebException
将有一个StatusCode
和一个StatusDescription
,您可能可以尝试更改部件avec 404,看看是否可以将其作为描述。否则,由于它是您自己的工具,因此您不限于标准错误代码a Browser必须支持HTTP,您可能可以使用自己的(虽然404
因未找到文件而闻名)经过一些本地测试,我编辑了我的答案,希望这对您更有用
if(e.Error != null)
header('HTTP/1.0 401 Unauthorized', true, 401);