通过 http 发送文件流不起作用
send file stream through http not working
我正在使用 fluentftp 库。
我分别有2台服务器,FTP服务器和Web服务器。所以我的方案是从 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();
}
我在我的 Web.config 文件的 <system.web>
部分
中启用了 Web 服务协议 Httpget 和 Httppost
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
然后从 Webservice 创建 link 下载并使用 URL 将参数传递给它,如下所示:
<a href="WS/Drivers.asmx/GetDownload?brandName=brand&modelName=model&osName=os&file=file" >download file</a>
因此不要更改 "GetDownload" 网络方法中的任何代码。
我的客户端点击下载文件和 "GetDownload" 方法连接到 FTP 服务器并检查凭据并取回指定的文件流。在该浏览器获取文件并优雅地打开下载对话框之后。
我正在使用 fluentftp 库。
我分别有2台服务器,FTP服务器和Web服务器。所以我的方案是从 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();
}
我在我的 Web.config 文件的 <system.web>
部分
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
然后从 Webservice 创建 link 下载并使用 URL 将参数传递给它,如下所示:
<a href="WS/Drivers.asmx/GetDownload?brandName=brand&modelName=model&osName=os&file=file" >download file</a>
因此不要更改 "GetDownload" 网络方法中的任何代码。
我的客户端点击下载文件和 "GetDownload" 方法连接到 FTP 服务器并检查凭据并取回指定的文件流。在该浏览器获取文件并优雅地打开下载对话框之后。