你的位置:首页 > ASP.net教程

[ASP.net教程]实现某某视频文件上传的接口并分块上传

直接上代码:

public static bool httpPost(string url, ref CookieContainer cc, ref string dataToPost, ref string dataget, bool isChangeCookie = false)    {      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);      request.AllowAutoRedirect = false;      request.KeepAlive = true;      request.Method = "POST";      request.ProtocolVersion = HttpVersion.Version11;      request.Proxy = WebRequest.DefaultWebProxy;      request.Credentials = CredentialCache.DefaultCredentials;      request.Headers.Add("Cache-Control: max-age=0");      request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");      request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,zh-TW;q=0.2,fr;q=0.2,ja;q=0.2");      request.ContentType = "application/x-www-form-urlencoded";      request.Accept = "text/html,application/xhtml+";      request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2008.2 Safari/537.36";      request.CookieContainer = cc;      try      {        StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);        writer.Write((string)dataToPost);        writer.Flush();        HttpWebResponse response = (HttpWebResponse)request.GetResponse();        if (response.ContentEncoding == "gzip")        {          MemoryStream ms = new MemoryStream();          GZipStream zip = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);          byte[] buffer = new byte[1024];          int l = zip.Read(buffer, 0, buffer.Length);          while (l > 0)          {            ms.Write(buffer, 0, l);            l = zip.Read(buffer, 0, buffer.Length);          }          ms.Dispose();          zip.Dispose();          dataget = Encoding.UTF8.GetString(ms.ToArray());        }        else          dataget = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")).ReadToEnd();        response.Close();        request.Abort();        return true;      }      catch (WebException exception)      {        if (exception.Response != null)        {          dataget = ((HttpWebResponse)exception.Response).StatusCode.ToString();        }        request.Abort();        return false;      }      catch      {        dataget = "error";        request.Abort();        return false;      }    }  }  public class SearchNews  {    public string location { get; set; }    public string fileName { get; set; }    public string FlagString { get; set; }    public string Flag { get; set; }  }

调用:

public void Test(string path)    {      System.Net.CookieContainer cc = null;      using (FileStream fs = new FileStream(path, FileMode.Open))      {        //缓冲区太小的话,速度慢而且伤硬盘        //声明一个4兆字节缓冲区大小,比如迅雷也有一个缓冲区,如果没有缓冲区的话,        //每下载一个字节都要往磁盘进行写,非常伤磁盘,所以,先往内存的缓冲区写字节,当        //写够了一定容量之后,再往磁盘进行写操作,减低了磁盘操作。        byte[] bytes = new byte[1024*1024*5];        int readBytes;        //第二个参数Offset表示当前位置的偏移量,一般都传0        int partNum = 1;        while ((readBytes = fs.Read(bytes, 0, bytes.Length)) > 0) //读取的位置自动往后挪动。        {          //readBytes为实际读到的byte数,因为最后一次可能不会读满。          //outStream.Write(bytes, 0, readBytes);          //byte[] fileData = new byte[outStream.Length];          byte[] buffer = bytes.Take(readBytes).ToArray();          //fs.Read(buffer, 0, readBytes);          string part = HttpUtility.UrlEncode(Convert.ToBase64String(buffer));          string dataGet = "";          string dataToPost = "{\"access_id\":\"1230\",\"access_key\":\"abc\",\"fileName\":\"test009.mp4\",\"part\":\"" + part + "\",\"partNum\":" + partNum + "}";          HttpPost.httpPost("http://xxxxxx/v2/DVR.UploadPart", ref cc, ref dataToPost, ref dataGet);          partNum++;          JavaScriptSerializer js = new JavaScriptSerializer();          SearchNews sn = js.Deserialize<SearchNews>(dataGet);        }        string dataToPostCom = "{\"access_id\":\"1230\",\"access_key\":\"abc\",\"fileName\":\"test009.mp4\"}";        string dataGetCom = "";        HttpPost.httpPost("http://xxxxxxxx/v2/DVR.UploadComplete", ref cc, ref dataToPostCom, ref dataGetCom);        JavaScriptSerializer js1 = new JavaScriptSerializer();        SearchNews sn1 = js1.Deserialize<SearchNews>(dataGetCom);      }    }