Подтвердить что ты не робот

API Google Диска с использованием С# - Загрузка

Я пытаюсь использовать Google Drive API из приложения asp.net для загрузки файлов.

Проблема: код работает локально, но при загрузке на сервер ничего не происходит (страница просто продолжает загружаться... экран разрешения не отображается. Помощь устранена. Папка "UploadedPdf" доступна для записи, а client_secrets.json существует в папке.

ПРИМЕЧАНИЕ. Я ничего не установил на сервере, а просто загрузил все файлы, включая DLL API Google, в папку bin на сервере.

UserCredential credential;
        using (var filestream = new FileStream(Server.MapPath("UploadedPdf/client_secrets.json"),
            FileMode.Open, FileAccess.Read))
        {
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(filestream).Secrets,
                new[] { DriveService.Scope.Drive },
                "user",
                CancellationToken.None,
                new FileDataStore(Server.MapPath("UploadedPdf/"))).Result;
        }

        // Create the service.
        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Drive API Sample",
        });

        Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
        body.Title = "My document";
        body.Description = "A test document";
        body.MimeType = "text/plain";

        byte[] byteArray = System.IO.File.ReadAllBytes(Server.MapPath("UploadedPdf/sample.txt"));
        System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

        FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
        request.Upload();

        Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
4b9b3361

Ответ 1

FileDatastore помещает файлы по умолчанию в% appData%. Обычно я бы сделал что-то вроде этого. (позволяет предположить, что я также использую "пользователь" )

new FileDataStore("Console.Analytics.Auth.Store")  

Затем, когда я его вызываю, я получаю каталог с именем

%AppData%\Roaming\Console.Analytics.Auth.Store

в этом каталоге теперь находится файл с именем

Google.Apis.Auth.OAuth2.Responses.TokenResponse-user

Я не тестировал, что делать

new FileDataStore(Server.MapPath("UploadedPdf/"))

но я предполагаю, что вы собираетесь получить каталог с именем

%AppData%\Roaming\serverpat/uploadpdf/

Что я не думаю, это то, что вам нужно. Если это на самом деле то, что вы пытаетесь сделать, вы сделали этот каталог доступным для записи? Возможно, вы захотите посмотреть вместо LocalFileDataStore.

Я не уверен, что это ваша проблема или нет.

Также помните, что вы жестко кодируете "пользователь", поэтому технически ваш код попросит вас пройти аутентификацию один раз для "пользователя", после чего у него есть аутентификация в этом файле для "пользователя", поэтому нет причин просить об этом еще раз.

Ответ 2

Я думаю, что вы вызываете AuthorizeAsync() неправильно. Используйте ключевое слово ожидания и удалите .Result. Для этого вам нужно будет пометить метод как асинхронный.

Я бы также предложил использовать метод UploadAsync(). Вам не нужно загружать весь файл в память с помощью ReadAllBytes(). Просто используйте File.OpenRead() и передайте FileStream вместо MemoryStream.

В Google есть пример кода: https://developers.google.com/api-client-library/dotnet/guide/media_upload

Ответ 3

Ваш код подсказывает, что вы используете рабочий процесс/учетные данные "Установленный приложение", который должен работать нормально, если вы используете приложение ASP.NET локально. Однако, когда вы перемещаете один и тот же код на веб-сервер, его больше не установлено. Он входит в категорию "Веб-приложение".

Вам нужно перейти в Консоль разработчика Google → Учетные данные- > Создать новый идентификатор клиента и создать новый набор учетных данных для вашего веб-приложения. Также вам необходимо изменить поток OAuth в соответствии с этим руководством:

https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc

Ответ 4

Шаги

включают

1)Access to the internet and a web browser, in order to authorize the sample   app.
2)A Google account with Drive enabled.
3)An environment to run programs in your selected language.

попробуйте это,

https://developers.google.com/drive/v2/reference/files/insert#examples