Заблокировано: при запуске функции Azure как исправить ошибку: доступ к файлу по пути 'D: \ Program Files (x86) \ SiteExtensions \ запрещен? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть функция Azure, в которой есть код для загрузки видео на мой канал YouTube, когда в контейнере "video" есть видеофайл. Код, который я использую, взят из примера кода YouTube API: https://developers.google.com/youtube/v3/docs/videos/insert. Я взял этот код и поместил его в функцию Azure (код ниже). Когда я компилирую и запускаю функцию локально, она работает нормально, и я могу загрузить видео, используя Azure Storage Explorer (ниже - журнал вывода консоли), и я вижу, что видео отлично загружается на моем канале YouTube.

Однако, когда я публикую sh функцию на портале Azure и загружаю файл .mp4 в мой контейнер Video, функция жалуется на следующую ошибку: enter image description here Как сделать уверены, что файл "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);
            }
        }
    }
}
...