首页 > 代码库 > 将本地文件上传到指定的服务器(HttpWebRequest方法)

将本地文件上传到指定的服务器(HttpWebRequest方法)

将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值.

  1      ///<summary>  2         /// 将本地文件上传到指定的服务器(HttpWebRequest方法)  3         /// </summary>  4         /// <param name="address">文件上传到的服务器</param>  5         /// <param name="fileNamePath">要上传的本地文件(全路径)</param>  6         /// <param name="saveName">文件上传后的名称</param>  7         /// <param name="progressBar">上传进度条</param>  8         /// <returns>成功返回1,失败返回0</returns>  9         private string UploadRequest(string url, string filePath, string fileName) 10         { 11             string returnValue = http://www.mamicode.com/""; 12             // 要上传的文件 13             FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); 14             BinaryReader r = new BinaryReader(fs); 15             //时间戳 16             string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x"); 17             byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "--\r\n"); 18             //请求头部信息 19             StringBuilder sb = new StringBuilder(); 20             sb.Append("--"); 21             sb.Append(strBoundary); 22             sb.Append("\r\n"); 23             sb.Append("Content-Disposition: form-data; name=\""); 24             sb.Append("file"); 25             sb.Append("\"; filename=\""); 26             sb.Append(fileName); 27             sb.Append("\""); 28             sb.Append("\r\n"); 29             sb.Append("Content-Type: "); 30             sb.Append("application/octet-stream"); 31             sb.Append("\r\n"); 32             sb.Append("\r\n"); 33             string strPostHeader = sb.ToString(); 34             System.Console.Write(strPostHeader); 35             System.Console.Write("文件内容...."); 36             System.Console.Write("\r\n--" + strBoundary + "--\r\n"); 37             byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); 38             // 根据uri创建HttpWebRequest对象 39             HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(url)); 40             httpReq.Method = "POST"; 41             //对发送的数据不使用缓存 42             httpReq.AllowWriteStreamBuffering = false; 43             //设置获得响应的超时时间(300秒) 44             httpReq.Timeout = 300000; 45             httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; 46             long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length; 47             long fileLength = fs.Length; 48             httpReq.ContentLength = length;//请求内容长度 49             try 50             { 51                 //每次上传5M 52                 int bufferLength = 1024 * 1024 * 5; 53                 byte[] buffer = new byte[bufferLength]; 54                 //已上传的字节数 55                 long offset = 0; 56                 //开始上传时间 57                 DateTime startTime = DateTime.Now; 58                 int size = r.Read(buffer, 0, bufferLength); 59                 Stream postStream = httpReq.GetRequestStream(); 60                 //发送请求头部消息 61                 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); 62                 while (size > 0) 63                 { 64                     postStream.Write(buffer, 0, size); 65                     offset += size; 66                      67                     TimeSpan span = DateTime.Now - startTime; 68                     double second = span.TotalSeconds; 69                     lblTime.Text = "已用时:" + second.ToString("F2") + ""; 70                     if (second > 0.001) 71                     { 72                         lblSpeed.Text = " 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒"; 73                     } 74                     else 75                     { 76                         lblSpeed.Text = " 正在连接…"; 77                     } 78                     lblState.Text = "已上传:" + (offset * 100.0 / length).ToString("F2") + "%"; 79                     lblSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M"; 80  81                     size = r.Read(buffer, 0, bufferLength); 82                 } 83                 //添加尾部的时间戳 84                 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); 85                 postStream.Close(); 86                 //获取服务器端的响应 87                 WebResponse webResponse = httpReq.GetResponse(); 88                 Stream s = webResponse.GetResponseStream(); 89                 StreamReader sr = new StreamReader(s); 90                 //读取服务器端返回的消息 91                 returnValue =http://www.mamicode.com/ sr.ReadLine(); 92                 s.Close(); 93                 sr.Close(); 94                  95             } 96             catch(Exception ex) 97             { 98                 returnValue = http://www.mamicode.com/ex.Message + ex.StackTrace; 99             }100             finally101             {102                 fs.Close();103                 r.Close();104             }105             return returnValue;106         }

 

将本地文件上传到指定的服务器(HttpWebRequest方法)