如何在c#上使用youtube-data-api发布视频属性

时间:2015-10-01 12:38:32

标签: c# asp.net youtube-api youtube-data-api

我尝试使用asp.net上的youtube api v3将视频上传到我的YouTube帐户。我搜索了很多,但没有找到任何代码示例来执行此操作。实际上现在我可以以某种方式上传视频,但我不能给我的视频提供名称,描述等。这是我用来上传视频的代码。

        Uri uri = new Uri("https://www.googleapis.com/upload/youtube/v3/videos?part=snippet");
        WebClient wc = new WebClient();

        wc.Headers.Add("Authorization", "Bearer {access_token}");
        byte[] file = File.ReadAllBytes(Server.MapPath("/videos/test.mp4"));
        byte[] response = wc.UploadData(uri, file);

        string jSonResult = String.Format("\nResult received was {0}",
              Encoding.ASCII.GetString(response));
        return jSonResult;

1 个答案:

答案 0 :(得分:0)

不知道您是否已找到解决方案。 但是这个代码适用于我的机器! ;)

    byte[] jsonBytes = Encoding.UTF8.GetBytes(json);
    //byte[] file = File.ReadAllBytes(videoFilePath);

    using (var fileStream = new FileStream(videoFilePath, FileMode.Open))
    {
        Uri uri = new Uri("https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status");

        HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri);
        request.Method = "POST";
        request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + authToken);
        request.ContentLength = jsonBytes.Length;
        request.ContentType = "application/json; charset=utf-8";
        request.Headers.Add("X-Upload-Content-Length", fileStream.Length.ToString());
        request.Headers.Add("X-Upload-Content-Type", "video/*");

        string location = string.Empty;
        using (Stream dataStream = request.GetRequestStream())
        {
            dataStream.Write(jsonBytes, 0, jsonBytes.Length);
        }
        try
        {
            using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
            {
                location = response.Headers["Location"];
            }
        }
        catch (WebException ex)
        {
            Response.Write(ex.ToString());
        }

        request = (HttpWebRequest) WebRequest.Create(location);
        request.Method = "PUT";
        request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + authToken);
        request.ContentLength = fileStream.Length;
        request.ContentType = "video/*";
        using (Stream dataStream = request.GetRequestStream())
        {
            byte[] buffer = new byte[fileStream.Length];
            var data = fileStream.Read(buffer, 0, buffer.Length);
            dataStream.Write(buffer, 0, data);
            //dataStream.Write(file, 0, file.Length);
        }
        try
        {
            using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
            {
            }
        }
        catch (WebException ex)
        {
            Response.Write(ex.ToString());
        }