用HttpListener实现文件下载
2008-05-14 13:31
525 查看
和asp.net中一样,如果要实现url重定向,使用response.Redirect()方法即可,在中使用如下:
string desUrl = "http://www.google.com";
response.Redirect(desUrl);
response.OutputStream.Close();
如果desUrl执行的是网络上的一个文件,一般ie就会提示文件下载。但是,许多时候,ie会打开这个文件(如目标是文本文件就会这样),这有时不是我们所需要的,如何强制ie以下载的方式获取文件呢?解决方式如下:
static void ProcessHttpClient(object obj)
{
HttpListenerContext context = obj as HttpListenerContext;
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
response.ContentType = "application/octet-stream";
string fileName = "time.txt";
response.AddHeader("Content-Disposition", "attachment;FileName=" + fileName);
byte[] data = Encoding.Default.GetBytes(string.Format("当前时间: {0}", DateTime.Now));
response.ContentLength64 = data.Length;
System.IO.Stream output = response.OutputStream;
output.Write(data, 0, data.Length);
output.Close();
}
这种方式有一个小问题,那就是当文件名为中文时,会产生乱码,解决方法是用调用HttpUtility.UrlEncode 函数对文件名进行编码。
string desUrl = "http://www.google.com";
response.Redirect(desUrl);
response.OutputStream.Close();
如果desUrl执行的是网络上的一个文件,一般ie就会提示文件下载。但是,许多时候,ie会打开这个文件(如目标是文本文件就会这样),这有时不是我们所需要的,如何强制ie以下载的方式获取文件呢?解决方式如下:
static void ProcessHttpClient(object obj)
{
HttpListenerContext context = obj as HttpListenerContext;
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
response.ContentType = "application/octet-stream";
string fileName = "time.txt";
response.AddHeader("Content-Disposition", "attachment;FileName=" + fileName);
byte[] data = Encoding.Default.GetBytes(string.Format("当前时间: {0}", DateTime.Now));
response.ContentLength64 = data.Length;
System.IO.Stream output = response.OutputStream;
output.Write(data, 0, data.Length);
output.Close();
}
这种方式有一个小问题,那就是当文件名为中文时,会产生乱码,解决方法是用调用HttpUtility.UrlEncode 函数对文件名进行编码。
相关文章推荐
- 用HttpListener实现文件下载
- C#实现http协议支持上传下载文件的GET、POST请求
- HttpConnectUtil实现文件的上传下载
- Java servlet 简单实现http文件下载断点续传功能
- java 实现 http 文件下载
- Winfrom 线程实现 http、https 文件下载 显示下载进度详情
- 使用Java程序来实现HTTP文件的队列下载
- 实现各种文件的下载方法:用于 WEB上的报表导出(jxl 实现Excel报表下载),核心思想就是将文件的输出流传给HttpResponseOutputStream 里就成了。
- 用HttpListener实现文件断点续传
- 发一个多线程通过 HTTP 下载文件的类(Linux下的实现)
- HttpServletResponse对象实现文件下载
- delphi 实现文件http上传下载
- HttpWebRequest实现文件下载(断点续传)
- 通过设置文件HTTP header来实现下载文件自动重命名
- delphi IdHTTP实现Get方法下载文件,断点续传
- HttpHandler与HttpModule及实现文件下载
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- mobile实现HTTP下载文件
- 使用FileReference+HttpHandler实现文件上传/下载(Flex与.NET互操作)
- HttpClient 4 实现文件下载