c#上传大文件方法
2016-05-20 15:52
323 查看
客户端代码:
服务端:
客户端调用:
Upload_Request("http://localhost:7115/test/index", "d:\\t.rar", "kk");
/// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <param name="saveName">文件上传后的名称</param> /// <returns>服务器反馈信息</returns> private string Upload_Request(string address, string fileNamePath, string saveName) { // 要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); //时间戳 string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x"); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //请求头部信息 StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(strBoundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append("file"); sb.Append("\"; filename=\""); sb.Append(saveName); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("application/octet-stream"); sb.Append("\r\n"); sb.Append("\r\n"); string strPostHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); // 根据uri创建HttpWebRequest对象 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address)); httpReq.Method = "POST"; //对发送的数据不使用缓存【重要、关键】 httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒) //httpReq.Timeout = 300000; httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length; long fileLength = fs.Length; httpReq.ContentLength = length; try { //每次上传4k int bufferLength = 4096; byte[] buffer = new byte[bufferLength]; //已上传的字节数 long offset = 0; //开始上传时间 DateTime startTime = DateTime.Now; int size = r.Read(buffer, 0, bufferLength); Stream postStream = httpReq.GetRequestStream(); //发送请求头部消息 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); while (size > 0) { postStream.Write(buffer, 0, size); offset += size; TimeSpan span = DateTime.Now - startTime; //1024*1024=1048576 size = r.Read(buffer, 0, bufferLength); } //添加尾部的时间戳 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); postStream.Close(); //获取服务器端的响应 WebResponse webRespon = httpReq.GetResponse(); Stream s = webRespon.GetResponseStream(); StreamReader sr = new StreamReader(s); //读取服务器端返回的消息 string serverMsg = sr.ReadLine(); s.Close(); sr.Close(); } catch (Exception ex) { } finally { fs.Close(); r.Close(); } return ""; }
服务端:
HttpPostedFileBase file = Request.Files[0]; file.SaveAs(Server.MapPath("~/file/k.iso"));
客户端调用:
Upload_Request("http://localhost:7115/test/index", "d:\\t.rar", "kk");
相关文章推荐
- 字 典 加 密
- 聊一聊C#的Equals()和GetHashCode()方法
- C# DevExpress TreeList指定KeyFieldName后无法显示该列的问题
- C#中CLR(公共语言运行时)与IL(中间代码)
- 加 密 基 础
- C#中的集合对象总结
- C#多线程技术总结(同步)
- C#多线程技术总结(异步)
- C#设计模式之简单工厂模式(Simple Factory)
- C# 自己用到的几个参数转换方法
- C#技术开发
- C#技术开发
- C#windows service服务
- (C#) 使用Nullable类型
- C#多线程那点事——信号量(Semaphore)
- C#/.NET 基础学习
- C#技术开发中心
- [C#] .NET4.0中使用4.5中的 async/await 功能实现异
- 浅谈对C#-lock()的理解
- c#中垃圾回收机制