通过HTTP发送文件流不起作用

时间:2019-11-26 09:29:19

标签: c# asp.net fluentftp

我正在使用fluentftp 库。

我分别有2个服务器,FTPserver和WebServer。所以我的情况是从ftp服务器下载大文件,然后通过http ajax响应将其发送给我的客户端。我创建了一个webservice .asmx文件和一个用于创建下载数据的webmethod。

这是我的代码,用于发送大块数据,但浏览器中没有任何反应。

[WebMethod(enableSession: true)]
public void GetDownload(string brandName, string modelName, string osName, string file)
{
  if (!FtpConnect())
            throw new Exception("Error ftp connection.");
  byte[] buffer = new byte[1024];
  string path = "disk1/Drivers/" + GetFtpBrands(brandName) + "/" + modelName + "/" + osName + "/"  +file;
  HttpContext.Current.Response.Clear();
  HttpContext.Current.Response.ClearContent();
  HttpContext.Current.Response.BufferOutput = true;
  HttpContext.Current.Response.ContentType = "application/octet-stream";
  HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + file);
  FtpDataStream inputStream = (FtpDataStream) ftp.OpenRead(path,FtpDataType.Binary);

  int read = 0;
  while ((read = inputStream.Read(buffer, 0, buffer.Length)) > 0)
  {
       HttpContext.Current.Response.OutputStream.Write(buffer, 0, read);
       HttpContext.Current.Response.Flush(); // Sends all currently buffered output to the client.
  }
  inputStream.Close();
  HttpContext.Current.Response.OutputStream.Close();
}

1 个答案:

答案 0 :(得分:0)

我在<system.web>部分下的Web.config文件中启用了Web服务协议Httpget和Httppost

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

,然后创建从Web服务下载的链接,并使用如下URL传递参数给它:

<a href="WS/Drivers.asmx/GetDownload?brandName=brand&modelName=model&osName=os&file=file" >download file</a>

因此,请勿在“ GetDownload” Web方法中更改任何代码。

我的客户端单击下载文件,“ GetDownload”方法连接到FTP服务器并检查凭据并返回指定的文件流。在该浏览器中获取文件并正常打开下载对话框。