zoukankan      html  css  js  c++  java
  • 将本地文件上传到指定的服务器(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 = "";
     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("
    --" + strBoundary + "--
    ");
     18             //请求头部信息
     19             StringBuilder sb = new StringBuilder();
     20             sb.Append("--");
     21             sb.Append(strBoundary);
     22             sb.Append("
    ");
     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("
    ");
     29             sb.Append("Content-Type: ");
     30             sb.Append("application/octet-stream");
     31             sb.Append("
    ");
     32             sb.Append("
    ");
     33             string strPostHeader = sb.ToString();
     34             System.Console.Write(strPostHeader);
     35             System.Console.Write("文件内容....");
     36             System.Console.Write("
    --" + strBoundary + "--
    ");
     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 = sr.ReadLine();
     92                 s.Close();
     93                 sr.Close();
     94                 
     95             }
     96             catch(Exception ex)
     97             {
     98                 returnValue = ex.Message + ex.StackTrace;
     99             }
    100             finally
    101             {
    102                 fs.Close();
    103                 r.Close();
    104             }
    105             return returnValue;
    106         }
  • 相关阅读:
    fork安全的gettid高效实现
    TCP_DEFER_ACCEPT的坑
    TCP Linger的坑
    Blade和其他构建工具有什么不同
    在Blade中结合gperftools检查内存泄露
    GraphViz web版
    用户场景分析
    java-二维数组——with 刘童格
    java-四则运算-五-网页版--with刘童格
    java-四则运算-四
  • 原文地址:https://www.cnblogs.com/hedgerow/p/4123620.html
Copyright © 2011-2022 走看看