zoukankan      html  css  js  c++  java
  • 实现某某视频文件上传的接口并分块上传

    直接上代码:

    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+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
                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);
    
                }
            }
  • 相关阅读:
    Linux 升级内核开启 TCP BBR 有多大好处
    rbd-mirror配置指南-单向备份
    python调用dll方法
    Python调用Google翻译
    Python Sleep休眠函数
    用Python监听鼠标和键盘事件
    python编码(七)
    SceneControl+AE+鼠标滚轮缩放
    基于SceneControl单击查询功能的实现
    基于SceneControl的三维GIS开发
  • 原文地址:https://www.cnblogs.com/yxzs/p/4976937.html
Copyright © 2011-2022 走看看