У меня есть функция Azure, в которой есть код для загрузки видео на мой канал YouTube, когда в контейнере "video" есть видеофайл. Код, который я использую, взят из примера кода YouTube API: https://developers.google.com/youtube/v3/docs/videos/insert. Я взял этот код и поместил его в функцию Azure (код ниже). Когда я компилирую и запускаю функцию локально, она работает нормально, и я могу загрузить видео, используя Azure Storage Explorer (ниже - журнал вывода консоли), и я вижу, что видео отлично загружается на моем канале YouTube.
Однако, когда я публикую sh функцию на портале Azure и загружаю файл .mp4 в мой контейнер Video, функция жалуется на следующую ошибку: Как сделать уверены, что файл "Google.Apis.Auth.OAuth2.Responses.TokenResponse-use" не запрещен? Я не могу найти это "D \ program Files (x86)" в Azure. Можно ли вручную загрузить файл? Если да, то как я могу это сделать?
Вот мой код функции:
using System;
using System.IO;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace AzureFunctionToUploadToYoutube
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([BlobTrigger("video/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, Microsoft.Azure.WebJobs.ExecutionContext context, ILogger log)
{
log.LogInformation("Function triggered by blob." + name);
UserCredential credential;
log.LogInformation("Getting client secrets.");
using (var stream = new FileStream(System.IO.Path.Combine(context.FunctionAppDirectory, "client_secrets.json"), FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeUpload },
"user",
CancellationToken.None
);
}
log.LogInformation("Done getting secrets.");
log.LogInformation("Creating youtube service");
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
log.LogInformation("Done creating service.");
var video = new Video();
video.Snippet = new VideoSnippet();
video.Snippet.Title = name;
video.Snippet.Description = "Seattle Channel";
video.Snippet.Tags = new string[] { "tag1", "tag2" };
video.Snippet.CategoryId = "22";
video.Status = new VideoStatus();
video.Status.PrivacyStatus = "unlisted";
var VideoInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", myBlob, "video/*");
log.LogInformation("Trying to upload video");
try
{
await VideoInsertRequest.UploadAsync();
log.LogInformation("Done uploading video.");
}
catch (Exception ex)
{
log.LogInformation("Error uploading video: " + ex.Message);
}
}
}
}