A. ASP.NET 中,实现download下载,弹出打开和保存对话框,不限制文件大小,跪求实现代码,谢谢了
思路很简单,读取服务器文件路径,然后再保存数据流,下面是实现代码:(ps:因为要上班,来不及写很多注释,关键的地方加了几句注释哈)using System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using YTLib.Basic;using YTLib.YTDBC;using System.IO;using System.Threading;namespace siteadmin.admin{ public partial class downfile : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string strSQL = ""; YTNDBObject dbo = new YTNDBObject(); dbo.DataName = "Main"; Page.EnableViewState = false; if(!IsPostBack) { string sid=Request["id"]; if(!YTLib.publicOP.IsNumString(sid)||sid==null) sid="0"; strSQL = "select * from FileSource where [email protected]"; dbo.PrepareCommand(strSQL); dbo.SetCmdIntValue("@ID",int.Parse(sid)); DataTable dt=dbo.QueryData().Tables[0]; string sourceName = (string)dt.Rows[0]["FilePath"]; sourceName.Trim();//消除空格 string filesnames = sourceName.Substring(7, sourceName.Length – 8); int index= sourceName.LastIndexOf("."); string extend = sourceName.Substring(index+1);//扩展名 string fullPath = "~/uploaded/" + sourceName; fullPath = Server.MapPath(fullPath); //读出该资源的下载次数 int downloadtimes = 0; downloadtimes = int.Parse(dt.Rows[0]["downloadCounts"].ToString()); Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, filesnames, fullPath, 1024000); if (!success) Response.Write("<script language=\"javascript\">alert(\"Download file error\");window.location.href=\"../Download.aspx\"</script>"); else { //记录下载次数 downloadtimes++; string sqlStr = "update FileSource set downloadCounts=" + downloadtimes + " where [email protected]"; dbo.PrepareCommand(sqlStr); dbo.SetCmdIntValue("@IID",int.Parse(sid)); dbo.ExecuteNoQuery(); } Response.Write("<script language=\"javascript\">window.location.href=\"../Download.aspx\"</script>"); } } public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed) { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false;//不缓冲 long fileLength = myFile.Length; long startBytes = 0; double pack = 10240; //10K bytes int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength – startBytes).ToString()); if (startBytes != 0) { //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((fileLength – startBytes) / pack) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString()))); Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; } } }
B. C#.NET中如何解决HttpWebResponse下载网页后的编码转换
试试Encoding.Default吧
C. vb.net HttpWebResponse和HttpWebRequest 下载网页源代码 如何等待网页加载完毕在在下
在HttpWebRequest.GetResponse运行完毕之后,就表示网页已经加载完毕了。如果是异步获取HttpWebResponse,没扰那么在HttpWebRequest.EndGetResponse之后也表示网页加裤察滑载完胡腊毕了。
D. VB.NET如何实现文件的下载
给你一个遍历所有盘符下的文件夹的例子加一个遍历文件的就可以了。TreeNode node = new TreeNode("我的电脑"); treeView.Nodes.Add(node); //加入一个我的电脑节点 string[] drivesName = System.IO.Directory.GetLogicalDrives() //取得驱动器列表的集合 foreach(string name in drivesName) //用foreach遍历集合 { TreeNode drivesNode = new TreeNode(name); node.Nodes.Add(drivesNode); //加到我的电脑节点下 }
E. ASP.NET MVC4大文件下载的问题
刚碰到这个问题,下面的代码可以直接拷贝使用。 protected void Page_Load(object sender, EventArgs e) { DownFile1(@"D:\常用软件\win7.iso", "win7.iso"); } private void DownFile1(string filePath, string fileName) { ResponseFile(this.Request, this.Response, fileName, filePath, 1024000); } // 输出硬盘文件,提供下载 // 输入参数 _Request: Page.Request对象, _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数 // 返回是否成功 public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed) { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false; long fileLength = myFile.Length; long startBytes = 0; int pack = 10240; //10K bytes //int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' }); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength – startBytes).ToString()); if (startBytes != 0) { _Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength – 1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((double)((fileLength – startBytes) / pack)) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(pack)); Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; }
F. 通过.NET设计一个程序,根据用户提供的URL去远程http服务器下载指定的文件
使用httprequest请求资源(资源通过url访问),然后从httpresponse中读取byte[](字节数组),比如每次限量读取10*1024 b,当然,不一定每次肯定能读到这么多的数据,但是read是有返回值的,这个返回值正好是本次读取到的字节数,接下来,将这个读取到的字节数组写入XML文件,同时,你在read之前记录下时间刻度,read之后再次获取一下时间刻度,这样,通过两次时间刻度差就能得出时间间隔。瞬时下载速度则为: (时间差/本次下载字节数=下载速度) 至于单位kb/s 或 MB/S ,你可以自己去换算。 知识点: 注:httprequest,httpresponse,TimeSpan 请参照 http://msdn.microsoft.com/library/ 时间刻度TimeSpan tsstart= new TimeSpan(DateTime.Now.Ticks); TimeSpan tsend = new TimeSpan(DateTime.Now.Ticks); TimeSpan ts = tsend.Subtract(tsstart).Duration(); 花费时间毫秒数 = ts.TotalMilliseconds;
G. C# 如何实现从http站点下载文件
如果不知道链接就先分析html文件获得链接 然后WebClient wc = new WebClient(); //创建网络通信实例 byte[] by = new byte[32]; //接收数据的数组 FileStream fs = new FileStream(filepath, FileMode.Create, FileAccess.Write); //创建文件 BinaryWriter bw = new BinaryWriter(fs); while ((by = wc.DownloadData(dz)) != null) //写文件 { bw.Write(by, 0, by.Length); } FileInfo f = new FileInfo(filepath); f.MoveTo(filepath.Remove(filepath.LastIndexOf(".temp")) + ".swf"); //更名 bw.Close(); fs.Close(); //关闭数据流 ric.AppendText(filepath + "下载完毕");
H. C #里的request如何获取数据库中表中的记录
首先需要说明,在C#中REQUST有两种.1. 位于System.Web.HttpRequest是封装浏览器对服务器的请求的,主要用在ASP.NET中,其中包括浏览器请求的网址,查询字符串数据或表单数据等等.所以一般将System.Web.HttpReques中的Request通常都简称为request,即:"请求",有"请求"就有"响应(response)".在实际开发中,最常见的使用方法就是在ASP.NET中利用request对像用于获取FORM中各种控种的值,或者用于接收URL传参时的值.无法用来获取数据库或虚拟表中的记录.注:FORM中各种控件的值可以是用户输入,或者从数据库中取出来的数据绑定.例如: Request.Params["string型参数名"],Request.QueryString["string型参数名"]用于获取URL传参时某个参数的值.Request.Form["控件名称"]用于获取服务端控件FORM中的各种控件的值.2.位于System.Net.HttpWebRequest则是用来简化网络请求的过程,从服务器上获取文件/结果的,譬如你可以在代码中用这个类冒充浏览器(设置一个UserAgent)来发请求,处理回应这里的Rquest通常用于请求获取服务端的各种文件数据流,例如在程序中点里某个按扭将服务器上的某个地址的文件下载到本地硬盘.这个request在使用时由先创建一个对像实例.例如: System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("下载地址,比如说某个网址") 首先创建REQUEST对像, request.GetResponse().GetResponseStream()创建完成后就可以通过它来获取流中的数据了,然后将获取的数据交给System.IO.Stream的实例对像,就可以对需要下载的数据流进行处理了.同样,它也有一个与之相匹配的RESPONSE响应对像.这里就不再说明了…这种问概念性的问题记着多看看书就能找到明确的答案.以后不要再问这么没水平的问题了.会闹出笑话的…至于System.Web.HttpRequest与System.Net.HttpWebRequest具体的区别,以后从书上给抄了一段内容:HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法初始化新的 HttpWebRequest 对象。如果统一资源标识符 (URI) 的方案是 http:// 或 https://,则 WebRequest.Create 返回 HttpWebRequest 对象。可以使用 BeginGetResponse 和 EndGetResponse 方法对资源发出异步请求。唤稿BeginGetRequestStream 和 EndGetRequestStream 方法提供对发送数据流的异步访问。如果在访问资源时发生皮镇错误,则 HttpWebRequest 类将引发 WebException。WebException.Status 属性包含指示错误源的 WebExceptionStatus 值。HttpWebRequest 将发送到 Internet 资源的公共 HTTP 标头值公开为属性,由方法或系统设置;下表包含完整列表。可以将 Headers 属性中的其他标头设置为名称/值对。注意,服务器和缓存在请求期间可能会更改或添加标头。下表列出了由属性或方法设置或由系统设置的 HTTP 标头。System.Web.HttpRequest是封装浏览器对服务器的请求的,主要用在ASP.NET中,其中包括浏览器请求的网址,查询字符串数据或表单数据等等 而System.Net.HttpWebRequest则是用来简化网络请求的过程,从服务器上获取文件/结果的,譬如你可以在代码中用这个和握孝类冒充浏览器(设置一个UserAgent)来发请求,处理回应 第一:他们不是父子关系。 第二:Syste.Net.HttpWebRequest类是System.Net.WebRequest抽象类的一个子类,它是.NET Framework的用于访问Internet数据的请求/响应模型的抽象基类。使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据。在这种方式下,应用程序处理 WebRequest类的实例,而协议特定的子类则执行请求的具体细节。 System.Net.HttpWebRequest类和System.Net.FileWebRequest都继承了WebRequest 1、FileWebRequest类为使用file:// 方案来请求本地文件的URI实现WebRequest抽象基类。 2、HttpWebRequest类对WebRequest中定义的属性和方法提供支持,也对使用户能够直接与使用HTTP的服务器交互的附加属性和方法提供支持。 第三:System.Web.HttpRequest类使ASP.NET能够读取客户端在Web 请求期间发送的 HTTP值,HttpRequest类的方法和属性通过HttpApplication、HttpContext、Page 和 UserControl类的Request属性公开。 所以使用System.Web.HttpRequest类的时候其实都是利用HttpApplication、HttpContext、Page和UserControl类的Request属性。而使用System.Net.HttpWebRequest类时是为了获得一个Uri资源。自己创建。 System.Web 命名空间提供使得可以进行浏览器与服务器通信的类和接口。此命名空间包括 HttpRequest 类(用于提供有关当前 HTTP 请求的广泛信息)、HttpResponse 类(用于管理对客户端的 HTTP 输出)以及 HttpServerUtility 类(用于提供对服务器端实用工具与进程的访问)。System.Web 还包括用于 Cookie 操作、文件传输、异常信息和输出缓存控制的类。 System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口。WebRequest 和 WebResponse 类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使您能够开发出使用 Internet 资源的应用程序,而不必考虑各种不同协议的具体细节。
I. asp.net 怎样下载远程图片
#region 下载图片并上传至图片服务器 public string SaveUrlPics( string strHTML, string path) { string picserver = new CommonBLL().GetItemValue("PICSERVER");//获取图片服务器地址 string[] imgurlAry = GetImgTag(strHTML);//获取文章中的图片地址 try { WebClient wc = new WebClient(); for (int i = 0; i < imgurlAry.Length; i++) { //暂时处理避免多肆薯次进行添加处理 不处理本机的情况 if(imgurlAry[i].IndexOf(picserver)<0) { string preStr = DateTime.Now.ToString("yyyyMMddHHmmssfff"); preStr = preStr + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf("."));//获取图片的属性 生成图片名称 /好坦/下载的图片存储在TEMP文件夹中 wc.DownloadFile(imgurlAry[i], HttpContext.Current.Server.MapPath(path) + "/" + preStr); //把图片上传友雹桐至图片服务器 preStr = picserver + "/" + upImg(preStr, dropArtType.SelectedValue); strHTML = strHTML.Replace(imgurlAry[i], preStr); } } } catch (Exception ex) { ShowMessage(ex.Message); } return strHTML; } #endregion
J. asp.net中如何写下载代码
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Text;using System.IO;public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { DownloadClass dd = new DownloadClass(); dd.StrUrl = "http://127.0.0.1/UI.rar"; dd.StrFileName="C:\\1.rar"; dd.DownloadFile(); Response.Write(dd.strError); } //测试用线程1断点续传下载网络上的文件到本地电脑 public class DownloadClass { public string StrUrl;//文件下载网址 public string StrFileName;//下载文件保存地址 public string strError;//返回结果 public long lStartPos = 0; //返回上次下载字节 public long lCurrentPos = 0;//返回当前下载字节 public long lDownloadFile;//返回当前下载文件长度 public void DownloadFile() { System.IO.FileStream fs; if (System.IO.File.Exists(StrFileName)) { fs = System.IO.File.OpenWrite(StrFileName); lStartPos = fs.Length; fs.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针 } else { fs = new System.IO.FileStream(StrFileName, System.IO.FileMode.Create); lStartPos = 0; } //打开网络连接 try { System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl); long length = request.GetResponse().ContentLength; lDownloadFile = length; if (lStartPos > 0) request.AddRange((int)lStartPos); //设置Range值 //向服务器请求,获得服务器回应数据流 System.IO.Stream ns = request.GetResponse().GetResponseStream(); byte[] nbytes = new byte[512]; int nReadSize = 0; nReadSize = ns.Read(nbytes, 0, 512); while (nReadSize > 0) { fs.Write(nbytes, 0, nReadSize); nReadSize = ns.Read(nbytes, 0, 512); lCurrentPos = fs.Length; } fs.Close(); ns.Close(); strError = "下载完成"; } catch (Exception ex) { fs.Close(); strError = "下载过程中出现错误:" + ex.ToString(); } } } }