利用了xmlhttp,实现代码比较简单具体实现如下:

首先bin文件引入,com->microsoft xml v3.0

具体代码如下:

protected void Button1_Click(object sender, EventArgs e)
{
string FileNames = "201406251824392435.pdf", ContentType = "";
string houzhui = FileNames.Substring(FileNames.LastIndexOf("."));
ContentType = checktype(FileNames);
string Url = "http://xxx.xxx.xxx.xxx:8089/upfile/wenku/" + FileNames;//域名或者ip地址
string StringFileName = Url.Substring(Url.LastIndexOf("/") + );
string StringFilePath = Request.PhysicalApplicationPath;
if (!StringFilePath.EndsWith("/")) StringFilePath += "/";
try
{
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
_xmlhttp.open("GET", Url, false, null, null);
_xmlhttp.send("");
if (_xmlhttp.readyState == )//数据接收完毕
{
if (_xmlhttp.status == )//是否返回正确数据
{
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("测试" + houzhui, System.Text.Encoding.UTF8));
HttpContext.Current.Response.ContentType = ContentType;
HttpContext.Current.Response.BinaryWrite((byte[])_xmlhttp.responseBody);//输出二进制到浏览器
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
else
{ Response.Write("错误:" + _xmlhttp.statusText + " 未找到要下载的文件!"); }
}
else
{
Response.Write("错误:" + _xmlhttp.statusText + " 请求的http地址不对!");
Response.End();
}
}
catch (Exception ex)
{
Response.Write("错误:无法找到请求的资源!");
Response.End();
} }

返回mime类型:

private static string checktype(string filename)
{
string ContentType;
string houzhui = filename.Substring(filename.LastIndexOf(".") + ).Trim().ToLower();
switch (houzhui)
{
case ".asf":
ContentType = "video/x-ms-asf ";
break;
case ".avi":
ContentType = "video/avi ";
break;
case ".doc":
ContentType = "application/msword ";
break;
case ".zip":
ContentType = "application/zip ";
break;
case ".xls":
ContentType = "application/vnd.ms-excel ";
break;
case ".gif":
ContentType = "image/gif ";
break;
case ".jpg":
ContentType = "image/jpeg ";
break;
case "jpeg":
ContentType = "image/jpeg ";
break;
case ".wav":
ContentType = "audio/wav ";
break;
case ".mp3":
ContentType = "audio/mpeg3 ";
break;
case ".mpg":
ContentType = "video/mpeg ";
break;
case ".mepg":
ContentType = "video/mpeg ";
break;
case ".rtf":
ContentType = "application/rtf ";
break;
case ".html":
ContentType = "text/html ";
break;
case ".htm":
ContentType = "text/html ";
break;
case ".txt":
ContentType = "text/plain ";
break;
case ".pdf":
ContentType = "application/pdf";
break;
default:
ContentType = "application/octet-stream ";
break;
}
return ContentType;
}

下载文件并保存到本机:

 /// <summary>
/// 获取远程文件到本地
/// </summary>
/// <param name="url">远程文件地址</param>
/// <param name="path">本地路径</param>
private static void DownUrltoFile(string url, string path)
{
string Cookie = String.Empty;
String refer = url.Substring(0, url.LastIndexOf("/") + 1);
System.Net.HttpWebRequest req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
req.AllowAutoRedirect = false;
req.Referer = refer;
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
System.Net.HttpWebResponse res = req.GetResponse() as System.Net.HttpWebResponse;
System.Net.WebHeaderCollection headers = res.Headers;
String newUrl = "";
if ((res.StatusCode == System.Net.HttpStatusCode.Found) ||
(res.StatusCode == System.Net.HttpStatusCode.Redirect) ||
(res.StatusCode == System.Net.HttpStatusCode.Moved) ||
(res.StatusCode == System.Net.HttpStatusCode.MovedPermanently))
{
newUrl = headers["Location"];
newUrl = newUrl.Trim();
} if (headers["Set-Cookie"] != null)
{
Cookie = headers["Set-Cookie"];
}
res.Close();
req = null;
String fileName = newUrl.Substring(newUrl.LastIndexOf("/") + 1);
req = System.Net.HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
req.AllowAutoRedirect = true;
req.Referer = url;
req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
res = req.GetResponse() as System.Net.HttpWebResponse;
System.IO.Stream stream = res.GetResponseStream();
byte[] buffer = new byte[32 * 1024];
int bytesProcessed = 0;
System.IO.FileStream fs = System.IO.File.Create(HttpContext.Current.Server.MapPath(path));
int bytesRead;
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, bytesRead);
bytesProcessed += bytesRead;
}
while (bytesRead > 0);
fs.Flush();
fs.Close();
res.Close();
}

  

HttpWebRequest,下载远程文件输出到浏览器

    调用:ReadFileWriterBinary("http://1.1.1.1:8889/xxx/xxx/xxx.pdf", "xx.pdf");

    private void ReadFileWriterBinary(String path, String fileName)
{
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(path);
HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();
Stream readStream = myWebResponse.GetResponseStream();
BinaryReader SplitFileReader = new BinaryReader(readStream);
HttpContext.Current.Response.ContentType = "application/save";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
byte[] TempBytes = SplitFileReader.ReadBytes(Convert.ToInt32(myWebResponse.ContentLength));
HttpContext.Current.Response.BinaryWrite(TempBytes);
SplitFileReader.Close();
readStream.Close();
}

  

完善后,注释掉的是本地的处理:

/// <summary>
/// 下载文件
/// </summary>
/// <param name="URL">下载文件地址</param>
/// <param name="Filename">下载后的存放地址</param>
public string DownloadFile(string URL, string filename)
{
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)
System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
if (myrp.ContentLength != )
{
System.IO.Stream st = myrp.GetResponseStream();
//System.IO.Stream so = new System.IO.FileStream(filename,System.IO.FileMode.Create); Response.Clear();
long totalDownloadedByte = ;
byte[] by = new byte[];
int osize = st.Read(by, , (int)by.Length);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename));
while (osize > )
{
totalDownloadedByte = osize + totalDownloadedByte;
Response.OutputStream.Write(by, , osize);
Response.Flush();
//so.Write(by, 0, osize);
osize = st.Read(by, , (int)by.Length);
}
Response.Close(); //long totalDownloadedByte = 0;
//byte[] by = new byte[1024];
//int osize = st.Read(by, 0, (int)by.Length);
//while (osize > 0)
//{
// totalDownloadedByte = osize + totalDownloadedByte;
// so.Write(by, 0, osize);
// osize = st.Read(by, 0, (int)by.Length);
//}
//so.Close();
st.Close();
return "success";
}
else
{
return "文件不存在";
}
}
catch (System.Exception e)
{
return "下载文件失败!" + e.ToString();
}
}

.net 直接输出远程文件到浏览器和下载文件保存到本机的更多相关文章

  1. 转载: 正确处理浏览器在下载文件时HTTP头的编码问题(Content-Disposition)

    最近在做一个下载工具时,发现CSDN上的资源下载时竟然没有被拦截到,经过分析,终于有了一个发现,解决了我之前做文件下载时的乱码问题,所以转载这篇释疑文章,希望有人可以看到,可以从中得到帮助,也用来备忘 ...

  2. 由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载,但是ajax实现的文件下载并不能触发浏览器的下载文件弹出框,这里通过模拟表单提交实现同样的效果。

    由于想要实现下载的文件可以进行选择,而不是通过<a>标签写死下载文件的参数,所以一直想要使用JFinal结合ajax实现文件下载(这样的话ajax可以传递不同的参数),但是ajax实现的文 ...

  3. JS前端创建CSV或Excel文件并浏览器导出下载

    长期以来,在做文件下载功能的时候都是前端通过ajax把需要生成的文件的内容参数传递给后端,后端通过Java语言将文件生成在服务器,然后返回一个文件下载的连接地址url.前端通过location.hre ...

  4. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...

  5. Python之FTP多线程下载文件之多线程分块下载文件

    Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...

  6. SFTP远程连接服务器上传下载文件-qt4.8.0-vs2010编译器-项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,Qt4.8.0版本,vs2010编译器 qt4.8.0-vs2010编译器项目实例下载地址:CSD ...

  7. SFTP远程连接服务器上传下载文件-vs2010项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2010 vs2010项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...

  8. SFTP远程连接服务器上传下载文件-vs2013项目实例

    本项目仅测试远程连接服务器,支持上传,下载文件,更多功能开发请看API自行开发. 环境:win7系统,vs2013 vs2013项目实例下载地址:CSDN下载 如果没有CSDN积分,百度网盘下载(密码 ...

  9. Node.js使用ftp连接远程ftp服务器枚举和下载文件示例

    示例代码: var Ftp = require('ftp'); var fs = require('fs'); var path = require('path'); // 首先判断参数中是否包含{d ...

随机推荐

  1. 使 Excel 规则更容易理解(Oracle Policy Modeling-Make your Excel rules easier to understand)

    有以下几种方法可以使 Excel 规则更容易理解. 在 Excel 工作簿中缩短属性名称 您可以使用图例关键字创建在 Excel 中引用属性的缩写方式.可以根据情况指定此缩写形式. 要指定图例关键字, ...

  2. iphone H5 input type="search" 不显示搜索 解决办法

    H5 input type="search" 不显示搜索 解决办法 H5 input type="search" 不显示搜索 解决方法 在IOS(ipad iP ...

  3. OSG使用更新回调来更改模型

    OSG使用更新回调来更改模型 转自:http://blog.sina.com.cn/s/blog_668aae7801017gl7.html 使用回调类实现对场景图形节点的更新.本节将讲解如何使用回调 ...

  4. C#项目打开/保存文件夹/指定类型文件,获取路径

    C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325 ...

  5. 用clip剪裁实现半圆

    定义和用法 clip 属性剪裁绝对定位元素. 说明 这个属性用于定义一个剪裁矩形.对于一个绝对定义元素,在这个矩形内的内容才可见.出了这个剪裁区域的内容会根据 overflow 的值来处理.剪裁区域可 ...

  6. [LintCode] Maximum Gap 求最大间距

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  7. HDU 4006 优先队列

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  8. windows用户用VMware 虚拟机安装黑苹果Mac.OS.X操作系统

    使用的操作系统操作系统 windows7 SP1 X64 本教程所用 的软件的下载地址都在本教程中 ) 电脑内存低于 4G 的,加内存吧 … 1. SecurAble (检测你的 CPU 是否支持硬件 ...

  9. 加盐加密salt

    加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联. 加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“( ...

  10. zabbix 服务端

    首先安装zabbix监控平台,必须是在lamp平台下才可以正常使用的 这个是用yum源安装的lamp 步骤一:更新yum源  1.执行以下命令更新yum源为Webtatic EL6 YUM源:  rp ...