Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图将视频上传到YouTube,视频上传了,但我';我在它之后得到一个异常';s上传_C#_Youtube Api_Google Data Api - Fatal编程技术网

C# 试图将视频上传到YouTube,视频上传了,但我';我在它之后得到一个异常';s上传

C# 试图将视频上传到YouTube,视频上传了,但我';我在它之后得到一个异常';s上传,c#,youtube-api,google-data-api,C#,Youtube Api,Google Data Api,代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Google.GData.Client; using Google.GData.Extensions; us

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Google.GData.Client;
using Google.GData.Extensions;
using Google.GData.Extensions.MediaRss;
using Google.GData.YouTube;
using Google.YouTube;



namespace YoutubeTesting
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }

        YouTubeRequestSettings settings;
        YouTubeRequest request;
        string devkey = "AI39si6xhSQXx95FTYIACWPfq-lLIphblgaReuz9z6VEjR1Q6YjrV6FRN2U6FN6P6-lGF2OYaUZhCVOKJ_MCk4o6kPeUszvf5A";
        string username = "tbout72";
        string password = "password here";


        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                settings = new YouTubeRequestSettings("You Manager", devkey, username, password);
                request = new YouTubeRequest(settings);
                Video video = new Video();
                video.Title = "test";
                video.Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema));
                video.Keywords = "Comedy";
                video.Private = false;
                video.MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV");
                request.Upload(video);
                MessageBox.Show("Successfully Uploaded");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
我引用了一些dll文件 我下载了两个文件:Google_Data_API_Setup_1.9.0.0.msi Google Data API Setup(1.9)和YouTube_SDK_1.9.0.0.msi

现在我又试着上传了一个视频文件,这个视频文件上传得很好,一次都没有问题,视频在youtube.com上运行 但即使它在我的代码中工作,我也会遇到一个异常错误。无论上传是否正常,我都会得到一个例外

  • 程序正在运行并挂起几分钟,运行时我看不到form1
  • 几分钟后,我得到了一个例外 即使我得到了异常,并且每次程序运行时我都得到了异常,但文件上传得很好

    我不知道为什么,但我看到该文件被上传了3-5次,有一次或两次上传了同一个文件,其他文件被拒绝,因为它是重复的。但是我只运行了一次程序,为什么有时候它会一次上传这么多次文件呢?现在我又试了一次;程序不再运行了,我10分钟前就关闭了它。看到文件上传并正在处理完成后我看到文件再次上传,现在它被拒绝,因为它是重复的。但是,如果程序没有运行,为什么它还要继续上传文件呢

    上传之间的时间是14分钟,相同的文件我的程序关闭了,我没有再运行它,但我看到两个文件同名,相同的文件:一个正常,一个被拒绝复制

    所以我现在有3个问题:

  • 运行程序时无法看到form1,就像程序挂起一样

  • 异常错误始终出现

  • 该文件正在上载多次

  • 例外情况是在线:请求。上传(视频)

    异常错误消息为:请求执行失败:

    https://uploads.gdata.youtube.com/feeds/api/users/default/uploads
    
    这是完全例外:

    Google.GData.Client.GDataRequestException was caught
      Message=Execution of request failed: https://uploads.gdata.youtube.com/feeds/api/users/default/uploads
      Source=Google.GData.Client
      StackTrace:
           at Google.GData.Client.GDataRequest.Execute()
           at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
           at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
           at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
           at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter)
           at Google.GData.Client.GDataGAuthRequest.Execute()
           at Google.GData.Client.MediaService.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
           at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
           at Google.GData.Client.Service.Insert[TEntry](Uri feedUri, TEntry entry)
           at Google.GData.YouTube.YouTubeService.Upload(String userName, YouTubeEntry entry)
           at Google.YouTube.YouTubeRequest.Upload(String userName, Video v)
           at Google.YouTube.YouTubeRequest.Upload(Video v)
           at YoutubeTesting.Form1.Form1_Load(Object sender, EventArgs e) in D:\C-Sharp\Youtube_Testing\YoutubeTesting\YoutubeTesting\Form1.cs:line 47
      InnerException: System.Net.WebException
           Message=The operation has timed out
           Source=System
           StackTrace:
                at System.Net.HttpWebRequest.GetResponse()
                at Google.GData.Client.GDataRequest.Execute()
           InnerException: 
    
    form1.cs上的第47行是:请求上传(视频)

    现在,我再次看到它上传了4次文件: 不知道为什么以及如何上传文件。 其中3个文件因重复而被拒绝,一个文件可以

    我问了一个人,他告诉我这对他来说没有任何问题

    我正在使用VisualStudio2010Pro.NET4.0 Windows 7 64位


    我多次检查了我的YouTube登录和密码,也检查了我的Gmail,一直都是相同的问题和异常。

    异常说明了这里发生了什么:您的请求超时。您可以使用更改超时。默认设置为100000毫秒。您可以将其设置为更大的数字,以增加超时,或将其设置为-1以保持默认的HTPPRequestObject:

    settings.Timeout = -1;
    
    此外,你应该在一个单独的线程上传视频。通过这种方式,GUI保持响应性,不会像您所说的那样“挂起”

    更新:

    您可以这样启动线程:

    new Thread(new ThreadStart(() =>
    {
        var settings = new YouTubeRequestSettings("You Manager", devkey, username, password)
        {
            Timeout = -1
        };
        var request = new YouTubeRequest(settings);
        var video = new Video()
        {
            Title = "test",
            Tags.Add(new MediaCategory("Comedy", YouTubeNameTable.CategorySchema)),
            Keywords = "Comedy",
            Private = false,
            MediaSource = new MediaFileSource("d:\\P9170031.MOV", "video/MOV"),
        };
        request.Upload(video);
    })).Start();
    

    下面是通过c#上传YouTube视频的教程


    请参阅此处:

    您能告诉我如何使用代码中的线程吗?我不知道该怎么做。