Меню

Произошла внутренняя ошибка сервера хранилища

I am just doing a standard intro tutorial to the Google Data Store and I am running locally on Ubuntu. It was working at first but for some reasons it stopped working and always show that follow error.

This is what I get if I try to access the data or when I go to http://localhost:8000/datastore

I tried deleting Google App Engine folder and redownloaded it and tried the command for clearing the data. I ran out of ideas. Have anyone encountered this problem?

Internal Server Error

The server has either erred or is incapable of performing the requested operation.

Traceback (most recent call last):
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/admin_request_handler.py", line 96, in dispatch
    super(AdminRequestHandler, self).dispatch()
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 667, in get
    kinds = self._get_kinds(namespace)
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 603, in _get_kinds
    return sorted([x.kind_name for x in q.run()])
  File "/home/matthew/Project/google_appengine/google/appengine/ext/db/__init__.py", line 2330, in next
    return self.__model_class.from_entity(self.__iterator.next())
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 3321, in next
    next_batch = self.__batcher.next_batch(Batcher.AT_LEAST_OFFSET)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 3207, in next_batch
    batch = self.__next_batch.get_result()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 2906, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1371, in check_rpc_success
    rpc.check_success()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success
    self.__rpc.CheckSuccess()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_rpc.py", line 157, in _WaitImpl
    self.request, self.response)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_sqlite_stub.py", line 971, in MakeSyncCall
    response, request_id)
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub.py", line 131, in MakeSyncCall
    method(request, response)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_stub_util.py", line 2962, in UpdateIndexesWrapper
    self._SetupIndexes()
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_stub_util.py", line 3438, in _SetupIndexes
    index_defs = datastore_index.ParseIndexDefinitions(index_text)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_index.py", line 208, in ParseIndexDefinitions
    return yaml_object.BuildSingleObject(IndexDefinitions, document)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_object.py", line 321, in BuildSingleObject
    definitions = BuildObjects(default_class, stream, loader)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_object.py", line 304, in BuildObjects
    listener.Parse(stream, loader)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_listener.py", line 227, in Parse
    self._HandleEvents(self._GenerateEventParameters(stream, loader_class))
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_listener.py", line 178, in _HandleEvents
    raise yaml_errors.EventError(e, event_object)
EventError: Unable to assign value '5770237022568448' to attribute 'name':
Value 5770237022568448 for name is not of the expected type str
  in "<string>", line 17, column 11:
      - name: 5770237022568448

Update with more information

This is what I see when I tried it on the interactive console:
enter image description here
This is what I see when I click Datastore Viewer, Datastore Indexes, or Blobstore viewer.

enter image description here

I am just doing a standard intro tutorial to the Google Data Store and I am running locally on Ubuntu. It was working at first but for some reasons it stopped working and always show that follow error.

This is what I get if I try to access the data or when I go to http://localhost:8000/datastore

I tried deleting Google App Engine folder and redownloaded it and tried the command for clearing the data. I ran out of ideas. Have anyone encountered this problem?

Internal Server Error

The server has either erred or is incapable of performing the requested operation.

Traceback (most recent call last):
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/admin_request_handler.py", line 96, in dispatch
    super(AdminRequestHandler, self).dispatch()
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/matthew/Project/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 667, in get
    kinds = self._get_kinds(namespace)
  File "/home/matthew/Project/google_appengine/google/appengine/tools/devappserver2/admin/datastore_viewer.py", line 603, in _get_kinds
    return sorted([x.kind_name for x in q.run()])
  File "/home/matthew/Project/google_appengine/google/appengine/ext/db/__init__.py", line 2330, in next
    return self.__model_class.from_entity(self.__iterator.next())
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 3321, in next
    next_batch = self.__batcher.next_batch(Batcher.AT_LEAST_OFFSET)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 3207, in next_batch
    batch = self.__next_batch.get_result()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_query.py", line 2906, in __query_result_hook
    self._batch_shared.conn.check_rpc_success(rpc)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1371, in check_rpc_success
    rpc.check_success()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 579, in check_success
    self.__rpc.CheckSuccess()
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_rpc.py", line 157, in _WaitImpl
    self.request, self.response)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_sqlite_stub.py", line 971, in MakeSyncCall
    response, request_id)
  File "/home/matthew/Project/google_appengine/google/appengine/api/apiproxy_stub.py", line 131, in MakeSyncCall
    method(request, response)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_stub_util.py", line 2962, in UpdateIndexesWrapper
    self._SetupIndexes()
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_stub_util.py", line 3438, in _SetupIndexes
    index_defs = datastore_index.ParseIndexDefinitions(index_text)
  File "/home/matthew/Project/google_appengine/google/appengine/datastore/datastore_index.py", line 208, in ParseIndexDefinitions
    return yaml_object.BuildSingleObject(IndexDefinitions, document)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_object.py", line 321, in BuildSingleObject
    definitions = BuildObjects(default_class, stream, loader)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_object.py", line 304, in BuildObjects
    listener.Parse(stream, loader)
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_listener.py", line 227, in Parse
    self._HandleEvents(self._GenerateEventParameters(stream, loader_class))
  File "/home/matthew/Project/google_appengine/google/appengine/api/yaml_listener.py", line 178, in _HandleEvents
    raise yaml_errors.EventError(e, event_object)
EventError: Unable to assign value '5770237022568448' to attribute 'name':
Value 5770237022568448 for name is not of the expected type str
  in "<string>", line 17, column 11:
      - name: 5770237022568448

Update with more information

This is what I see when I tried it on the interactive console:
enter image description here
This is what I see when I click Datastore Viewer, Datastore Indexes, or Blobstore viewer.

enter image description here

Для хранения и управления базой данных в Exchange 2003 есть служба под названием Information Store. Как следует из названия, это хранилище базы данных Exchange, состоящее из групп хранения: Private Store (Почтовые ящики) и общественный магазин (Общие папки).

Информационное хранилище может иметь одно или несколько хранилищ, и база данных сохраняется в файлах STM и EDB, в зависимости от типа данных. Например: потоковые данные, такие как вложения электронной почты. (документы, изображения, файлы и т. д.) сохраняется в СТМ файл в то время как ЕАБР файл хранит базу данных форматированного текста.

image001

Поскольку хранилище информации сохраняет важную базу данных, необходимо поддерживать ее бесперебойное функционирование. Любые помехи или нарушения в работе службы могут привести к неправильной среде обмена сообщениями. Например:

«Я выполняю обновление до выпуска антигена, а затем — до выпуска Exchange Server 2003. После удаления антигена я перезагрузил сервер Exchange, и с этого момента я не могу запустить хранилище информации. Кроме того, если я попытаюсь запустить службу вручную, на экране появится сообщение об ошибке: «

«Не удалось запустить службу банка данных Microsoft Exchange на локальном компьютере. Ошибка 1053: служба не ответила на запрос запуска или управления своевременно ».

image002

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

Примечание. После удаления старого антигена на сервере не было установлено ни одного антигена.

image004

Возможный обходной путь:

№1: Если установленная платформа .NET несовместима с Exchange Server, это может вызвать вышеупомянутую проблему. Убедитесь, что платформа .NET может работать синхронно с выпуском Exchange.

# 2: Другой вероятной причиной проблемы может быть отсутствие контейнера системного помощника Exchange. По умолчанию для службы ESA есть три контейнера:

#: Корпоративные серверы Exchange

#: Службы обмена

#: Серверы домена Exchange

Если какая-либо часть группы отсутствует, то определенно именно системный помощник Exchange вызывает проблему с запуском и, таким образом, влияет на запуск хранилища информации.

# 3: В библиотеке обратного вызова Exchange® есть важный файл jcb.dll. Если этот файл поврежден или отсутствует, то это может быть причиной ошибки 1053. В качестве временного решения скопируйте файл jcb.dll в папку «Exchsrvr / bin». Этот файл можно скопировать с компакт-диска с установочным пакетом Exchange 2003 SP2.

Подробнее о сбое запуска ИС:

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

1. Журнал следующих услуг может помочь определить, в чем именно заключается проблема. В средстве просмотра журналов Windows NT проанализируйте эффективность служб:

  • EDB файл
  • MSExchnageIS
  • MSExchnagePriv
  • MSExchnagePub

Если журнал событий извлечен, может возникнуть одна из следующих ошибок: Одна из них «Вне диска» или ошибка, из-за которой рекомендуется использовать «Исинтег-патч». Если в журнале событий есть какая-то другая ошибка, попробуйте рекомендации в следующем разделе.

2. Проверьте работающие службы Exchange Server и выключите их. Теперь перезагрузите компьютер, на котором установлен Exchange Server. Когда банк данных будет перезапущен, он попытается привести базу данных в согласованное состояние.

3. Сохраняйте полную резервную копию файлов EDB, STM или LOG. Теперь восстановите резервную копию и убедитесь, что «Запуск служб после восстановления» опция не включена. Поэтому, когда информационное хранилище запускается, оно воспроизводит уже существующие файлы журналов. Это поможет привести базу данных в рабочее состояние, и если это будет сделано без ошибок, это означает, что нет потери данных.

4. Если при воспроизведении файла журнала произошла ошибка, проверьте файлы журнала в журнале событий. Если есть какие-либо проблемы с файлом журнала, откройте папку Mdbdata. Проверьте, есть ли файлы журнала с большим номером. Если есть, удалите их и перезапустите ИС.

5. Если все не вернется в норму, восстановите полную онлайн-резервную копию с помощью «Запустить службу после восстановления» включено. Выберите вариант «Стереть все существующие данные». С этими параметрами резервная копия будет восстановлена ​​до того момента, когда она была сделана в последний раз.

Когда это будет сделано, запустите «Администратор сервера Exchange» заявление. Щелкните вкладку «Дополнительно» и затем запустите «Настройщик согласованности DS / IS».

Если проблема все еще не решена, последнее средство — уничтожить хранилище информации. Это приведет к безвозвратному удалению базы данных (почтовых ящиков и общих папок). Перед этим убедитесь, что у вас есть резервные копии всех важных файлов данных.

Я получаю сообщение об ошибке «Не удается получить дочерние ресурсы», когда щелкаю, чтобы развернуть узел «Порт эмулятора по умолчанию => таблицы» в обозревателе хранилища Azure (версия 1.6.2). Однако эмулятор хранилища таблиц Azure был инициализирован и запущен.

Обновлять:
Я удалил папку %appdata%/storageexplorer (как было предложено на моих форумах Microsoft) и столкнулся с той же проблемой, что и раньше.

Что мне не хватает?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM

Как установить LAMP Stack 1/2 на Azure Linux VM


Ответы
3

Я не могу воспроизвести эту проблему, поэтому трудно определить, что вызвало эту проблему.

Было бы лучше, если бы вы подняли вопрос перед командой обозревателя хранилищ Azure на GitHub здесь. Они помогут решить вашу проблему.

И еще я могу подумать, что вы можете удалить эмулятор и проводник хранилища, а затем переустановить последнюю версию.

Я уже пробовал удалить и установить эмулятор, проводник хранилища, но безуспешно. Я подниму заявку на github


— Ajit Goel

17.01.2019 20:44

Я создал тикет здесь: github.com/Microsoft/AzureStorageExplorer/issues/1078


— Ajit Goel

18.01.2019 04:55

Ответ принят как подходящий

Мне удалось заставить приложение работать

a. removing LocalDB database, 
b. deleting the localdb created mdf, ldf files, 
c. installing "SQL server Express" and manually creating the database that the Azure Storage explorer needed, and then configuring Azure Storage explorer to work with "SQL server Express"

В моем случае проблема заключалась в том, что существует более одного экземпляра MS SQL. Из-за того, что этот экземпляр не был правильно инициализирован.
Наши шаги по устранению проблемы

  1. Удалить созданную локальную БД
  2. Выполнить следующую команду при инициализации AzureStorageEmulator.exe init /server .

Пожалуйста, проверьте ссылка на сайт для получения дополнительных сведений о командах AzureStorageEmulator.

Я смог решить свои проблемы с помощью вышеуказанного подхода. Стоит проверить этот полный документ по ссылке выше.


— lenards

24.07.2020 22:39

Другие вопросы по теме

Я только что переключил загрузку изображений с помощью Multer с локального на Google Cloud Storage, используя «multer-google-storage». Раньше он работал нормально, но теперь отправляет 500 Internal Server Error без сообщения. Я использую Nodejs и Express, React для внешнего интерфейса. FormData отформатирован правильно, так как он отлично работает, если я вернусь в локальное хранилище. Любые идеи о том, как это исправить? Или вывести сообщение об ошибке? Я не могу найти много документации по «multer-google-storage». Спасибо за помощь!

Вот внутренний почтовый маршрут (параметры конфигурации я спрятал)

const multer = require('multer');
const multerGoogleStorage = require('multer-google-storage');

const upload = multer({
    storage: multerGoogleStorage.storageEngine({
        autoRetry: true,
        bucket: '******',
        projectId: '******',
        keyFilename: '../server/config/key.json',
        filename: (req, file, callback) => {
            callback(null, file.originalname);
        },
    }),
});




//@route        POST api/listings
//@description  Create listing
//@access       Private
router.post(
    '/',
    upload.any(),

    [
        isLoggedIn,
        [
            check('title', 'Title is required').not().isEmpty(),
            check('coordinates').not().isEmpty(),
            check('address').not().isEmpty(),
            check('price', 'Set a price').not().isEmpty(),
            check('description', 'Type a description').not().isEmpty(),
            check('condition', 'Declare the condition').not().isEmpty(),
            check('category', 'Please select a category').not().isEmpty(),
        ],
    ],

    async (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            console.log('validation error');
            return res.status(400).json({ errors: errors.array() });
        }
        try {
            const files = req.files;
            let images = [];

            for (let image of files) {
                images.push(image.originalname);
            }

            const newListing = new Listing({
                title: req.body.title,
                images: images,
                coordinates: JSON.parse(req.body.coordinates),
                price: req.body.price,
                description: req.body.description,
                condition: req.body.condition,
                dimensions: req.body.dimensions,
                quantity: req.body.quantity,
                address: req.body.address,
                author: req.user.id,
                category: JSON.parse(req.body.category),
            });

            const author = await User.findById(req.user.id);
            await author.listings.push(newListing);

            await author.save();
            const listing = await newListing.save();

            res.json(listing);
        } catch (error) {
            console.log('error');
            console.error(error);
            res.json(error);
            res.status(500).send('Server Error');
        }
    }
);

Раньше у меня есть набор кода API Google Диска, который отлично работает в следующих сценариях

  • Сохранить новый файл в appdata​​li >
  • Обновить предыдущий файл в appdata​​strong >
  • Сохранить новый файл в не-appdata​​li >
  • Обновить предыдущий файл в не-appdata​​li >

Несколько дней назад я столкнулся с тем, что сценарий 2 больше не работает (обновить предыдущий файл в appdata), тогда как другие сценарии по-прежнему работают без проблем. Я получаю следующее исключение.

com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error
{
  "code": 500,
  "errors": [
    {
      "domain": "global",
      "message": "Internal Error",
      "reason": "internalError"
    }
  ],
  "message": "Internal Error"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:423)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
    at org.yccheok.jstock.gui.Utils.updateFile(Utils.java:1414)

Я использую области DRIVE и DRIVE_APPDATA — authorizeDrive()

Код выглядит следующим образом

  • saveToGoogleDrive() — сохранить или обновить файл в appdata, не работает во время файла обновления. Работайте во время сохранения нового файла.
  • saveToLegacyGoogleDrive() — Сохранить или обновить файл в не-appdata, все работает!

Исключение возникает в строке 1414, которая

com.google.api.services.drive.model.File updatedFile = service.files().update(fileId, file, mediaContent).setNewRevision(false).execute();

Поиск предыдущего файла в appdata с использованием запроса title contains 'jstock-fe78440e-e0fe-4efb' and trashed = false and 'appdata' in parents полностью прекрасен. Мы можем без проблем восстановить прежний идентификатор файла.

Тем не менее, 500 Internal Server Error бросается, когда мы выполняем обновление файла с использованием полученного идентификатора файла.

Некоторые пользователи столкнулись с проблемой во время поиска в appdata (это не мой случай). Поиск папки внутри папки «appdata» . Предлагаемое решение — добавить drive.readonly.metadata. Я пробовал это однажды, но это не имеет значения.


Update

Отличное обходное решение, предложенное Jon Skeet

Мне удалось воспроизвести проблему. Без setNewRevision (false) это работы — я понимаю, что это может быть невыполнимо во всех случаях, но это разумное обходное решение для вас на данный момент?

Однако в этот момент я продолжу такое обходное решение. Мы предпочитаем иметь setNewRevision(false), чтобы предотвратить увеличение использования квоты на хранение данных пользователя — http://developers.google.com/drive/v2/reference/files/update


Короткий, но полный исходный код для демонстрации проблемы

  • Создайте идентификатор клиента и секретный ключ. Обновить исходный код.
  • Создайте document.txt
  • Запустите исходный код в первый раз, чтобы загрузить папку document.txt в appdata. Это должно быть успешным. Проверьте загруженный файл через Google Диск. (Пожалуйста, обратитесь к приложению)
  • Запустите исходный код второй раз, чтобы выполнить обновление в предыдущей папке document.txt в appdata. Исключение 500 Internal Server Error должно быть выбрано.

Изображение 32443

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package insert;

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.FileList;
import com.google.api.services.drive.model.ParentReference;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class Insert {

    private static com.google.api.services.drive.model.File searchFromGoogleDrive(Drive drive, String qString) {
        try {
            Drive.Files.List request = drive.files().list().setQ(qString);

            do {                
                FileList fileList = request.execute();

                com.google.api.services.drive.model.File file = null;

                for (com.google.api.services.drive.model.File f : fileList.getItems()) {

                    final String title = f.getTitle();

                    if (title == null || f.getDownloadUrl() == null || f.getDownloadUrl().length() <= 0) {
                        continue;
                    }

                    file = f;

                    break;
                }

                if (file != null) {
                    return file;
                }

                request.setPageToken(fileList.getNextPageToken());
            } while (request.getPageToken() != null && request.getPageToken().length() > 0);
        } catch (IOException ex) {
            log.error(null, ex);
            return null;
        }
        return null;
    }

    public static boolean saveToGoogleDrive(Credential credential, java.io.File file) {
        final String titleName = "document.txt";
        final String qString = "title contains '" + titleName + "' and trashed = false and 'appdata' in parents";        
        return _saveToGoogleDrive(credential, file, qString, "appdata");
    }

    public static Drive getDrive(Credential credential) {
        Drive service = new Drive.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("JStock").build();
        return service;
    }

    private static boolean _saveToGoogleDrive(Credential credential, java.io.File file, String qString, String folder) {
        Drive drive = getDrive(credential);

        // Should we new or replace?

        com.google.api.services.drive.model.File googleCloudFile = searchFromGoogleDrive(drive, qString);

        final String title = "document.txt";

        if (googleCloudFile == null) {
            String id = null;
            if (folder != null) {
                com.google.api.services.drive.model.File appData;
                try {
                    appData = drive.files().get(folder).execute();
                    id = appData.getId();
                } catch (IOException ex) {
                    log.error(null, ex);
                    return false;
                }
            }
            return null != insertFile(drive, title, id, file);
        } else {
            final com.google.api.services.drive.model.File oldFile = googleCloudFile;
            return null != updateFile(drive, oldFile.getId(), title, file);
        }
    }

    /**
     * Insert new file.
     *
     * @param service Drive API service instance.
     * @param title Title of the file to insert, including the extension.
     * @param parentId Optional parent folder ID.
     * @param mimeType MIME type of the file to insert.
     * @param filename Filename of the file to insert.
     * @return Inserted file metadata if successful, {@code null} otherwise.
     */
    private static com.google.api.services.drive.model.File insertFile(Drive service, String title, String parentId, java.io.File fileContent) {
        // File metadata.
        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
        body.setTitle(title);

        // Set the parent folder.
        if (parentId != null && parentId.length() > 0) {
            body.setParents(
                Arrays.asList(new ParentReference().setId(parentId)));
        }

        // File content.
        FileContent mediaContent = new FileContent("", fileContent);
        try {
            com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute();
            return file;
        } catch (IOException e) {
            log.error(null, e);
            return null;
        }
    }

    /**
     * Update an existing file metadata and content.
     *
     * @param service Drive API service instance.
     * @param fileId ID of the file to update.
     * @param newTitle New title for the file.
     * @param newFilename Filename of the new content to upload.
     * @return Updated file metadata if successful, {@code null} otherwise.
     */
    private static com.google.api.services.drive.model.File updateFile(Drive service, String fileId, String newTitle, java.io.File fileContent) {
        try {
            // First retrieve the file from the API.
            com.google.api.services.drive.model.File file = service.files().get(fileId).execute();

            // File new metadata.
            file.setTitle(newTitle);

            FileContent mediaContent = new FileContent("", fileContent);

            // Send the request to the API.
            com.google.api.services.drive.model.File updatedFile = service.files().update(fileId, file, mediaContent).setNewRevision(false).execute();

            return updatedFile;
        } catch (IOException e) {
            log.error(null, e);
            return null;
        }
    }

  private static String CLIENT_ID = "CLIENT_ID";
  private static String CLIENT_SECRET = "CLIENT_SECRET";

  private static String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";

  public static void main(String[] args) throws IOException {   
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        httpTransport, JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE_APPDATA, DriveScopes.DRIVE))
        .setAccessType("online")
        .setApprovalPrompt("auto").build();

    String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
    System.out.println("Please open the following URL in your browser then type the authorization code:");
    System.out.println("  " + url);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String code = br.readLine();

    GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
    GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

    java.io.File fileContent = new java.io.File("document.txt");
    saveToGoogleDrive(credential, fileContent);
  }

    private static final GsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();

    /** Global instance of the HTTP transport. */
    private static HttpTransport httpTransport;


    private static final Log log = LogFactory.getLog(Insert.class);

    static {
        try {
            // initialize the transport
            httpTransport = GoogleNetHttpTransport.newTrustedTransport();

        } catch (IOException ex) {
            log.error(null, ex);
        } catch (GeneralSecurityException ex) {
            log.error(null, ex);
        }
    }

}

Обновление от 1 января 2016 года

Эта проблема, похоже, ушла. Думаю, команда Google Drive исправила его.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Произошла внутренняя ошибка пожалуйста попробуйте еще раз турбо страница
  • Произошла внутренняя ошибка повторите попытку позже авито