YouTube API视频上传:BadRequest:元数据部分太大

时间:2018-01-26 14:07:36

标签: c# youtube youtube-api

我正在使用C#通过API将视频上传到YouTube。我正在使用HttpClient.PostAsync()。

执行PostAsync()后出现以下错误:错误请求:元数据部分太大。

我不太确定,如果此错误是由我的代码生成的,或者错误是在YouTube API上发生的。

//Prepare the file from the form
        var filePath = Path.GetTempFileName();

        if (formFile.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await formFile.CopyToAsync(stream);
            }
        }

        //Application logic, not related to YouTube API
        var user = await _userManager.FindByIdAsync(User.GetClaim(OpenIdConnectConstants.Claims.Subject));
        var personalPot = await _context.PersonalPots.FirstOrDefaultAsync(i => i.Id == id);

        if (user.Id != personalPot.Owner.Id)
        {
            return Unauthorized();
        }

        //Get the access token for the YouTube API
        var accessToken = await _externalContentService.RefreshGoogleToken(personalPot.Id, new Guid(user.Id));

        //Construct the properties, which will be send with the video file to upload
        var properties = new Properties()
        {
            snippet = new Snippet()
            {
                title = title,
                categoryId = categoryId,
                defaultLanguage = defaultLanguage,
                description = description,
                tags = tags.Split(",")
            },
            status = new Status()
            {
                embeddable = embeddable == "true",
                license = license,
                privacyStatus = privacy,
                publicStatsViewable = publicStatsViewable == "true"
            }
        };

        //Construct the HttpClient to post the file to YouTube
        var client = new HttpClient
        {
            BaseAddress = new Uri("https://www.googleapis.com/"),
            Timeout = new TimeSpan(0, 0, 0, 0, Timeout.Infinite),
            MaxResponseContentBufferSize = 2147483647
        };
        client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}");
        var requestContent = new MultipartFormDataContent();
        var fileContent = new StreamContent(formFile.OpenReadStream());
        var stringContent = new StringContent(JsonConvert.SerializeObject(properties), Encoding.UTF8, "application/json");
        requestContent.Add(fileContent);
        requestContent.Add(stringContent);
        var result = await client.PostAsync("upload/youtube/v3/videos?part=snippet,status", requestContent);

        //Result content will be "Bad Request; Metadata part too large"
        if (!result.IsSuccessStatusCode)
        {
            return BadRequest(new {content = result.Content.ReadAsStringAsync(), reasonPhrase = result.ReasonPhrase});
        }

0 个答案:

没有答案