Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过HTTP传输文件的Response.TransmitFile的替代方案_C#_Asp.net_Httpwebrequest - Fatal编程技术网

C# 通过HTTP传输文件的Response.TransmitFile的替代方案

C# 通过HTTP传输文件的Response.TransmitFile的替代方案,c#,asp.net,httpwebrequest,C#,Asp.net,Httpwebrequest,我正在开发一个允许用户下载文件的ASP.NET网站 以前,文件存储在与网站相同的服务器上,因此我们可以: Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); Response.AddHeader("Content-Length", response.ContentLength.ToString()); Response.ContentTy

我正在开发一个允许用户下载文件的ASP.NET网站

以前,文件存储在与网站相同的服务器上,因此我们可以:

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.ContentType = "application/octet-stream";
Response.TransmitFile(path);
Response.End();
但是,现在有些文件存储在单独的服务器上。我可以使用验证文件是否存在

WebRequest request = WebRequest.Create(absolute-url);
WebResponse response = request.GetResponse();
但是,由于TransmitFile需要一个虚拟路径而不是url,如何促进传输呢

我需要用户能够选择在哪里保存文件作为一个正常的网络下载

最好的方法是什么

  • 能否将用户重定向到另一台服务器上的URL
  • 您可以将请求代理到其他服务器。调用“GetResponse”时,获取流并将其内容写入响应对象

  • 您可以将远程服务器的驱动器映射为共享,然后使用TransmitFile。如果服务器没有视线,您可以在远程服务器上启用WebDAV,然后将它们映射到物理路径并使用TransmitFile。

    您不能将TransferFile用于远程文件。
    但是您可以使用WriteFile进行此操作。

    如果您可以通过web请求获取响应流,则应该能够按照以下代码段将流复制到输出流:

    while ((read = stream.Read(buffer, offset, chunkSize)) > 0)    
    {
    
        Response.OutputStream.Write(buffer, 0, read);
        Response.Flush();
    }
    

    请注意,API为Reponse.BinaryWriteI无法重定向,因为需要提示用户在每个实例中保存文件-即使下载的是通常可以在web浏览器中打开的图像。你能给我一个如何代理请求的例子吗?我不太明白你的意思!感谢您的建议如果唯一的要求是提示用户保存文件,那么只需通过IIS MMC将自定义HTTP头添加到文件夹中,并将“内容处置”设置为“附件”,就像在C#中所做的那样。然后一个简单的重定向到文件就可以了。我希望我不是天真的。你可以在另一台服务器上提供一个超链接,其中包含文件的URL(除非你想自己跟踪事情,或者你想在文件传输到客户端之前进行预处理)。我在另一个服务器传输文件上使用的路径不起作用,但这很好