Google Drive API - сообщение об автоматических запросах - PullRequest
7 голосов
/ 13 февраля 2020

Я использую этот Ghost плагин для хранения данных изображений на Google Диске. Недавно изображения перестали загружаться с этой страницы ошибки, загруженной вместо изображения:

https://github.com/robincsamuel/ghost-google-drive

Сайт работает в контейнере Ghost в Google Cloud. Запустите, источник здесь

Нужно ли где-нибудь открыть заявку в службу поддержки, чтобы решить эту проблему? Сайт, о котором идет речь, здесь

РЕДАКТИРОВАТЬ: Вот код, используемый для доступа к сохраненному контенту.

jwtClient.authorize(function(err, tokens) {
        if (err) {
          return next(err);
        }
        const drive = google.drive({
          version: API_VERSION,
          auth: jwtClient
        });
        drive.files.get(
          {
            fileId: id
          },
          function(err, response) {
            if (!err) {
              const file = response.data;
              const newReq = https
                .request(
                  file.downloadUrl + "&access_token=" + tokens.access_token,
                  function(newRes) {
                    // Modify google headers here to cache!
                    const headers = newRes.headers;
                    headers["content-disposition"] =
                      "attachment; filename=" + file.originalFilename;
                    headers["cache-control"] = "public, max-age=1209600";
                    delete headers["expires"];

                    res.writeHead(newRes.statusCode, headers);
                    // pipe the file
                    newRes.pipe(res);
                  }
                )
                .on("error", function(err) {
                  console.log(err);
                  res.statusCode = 500;
                  res.end();
                });
              req.pipe(newReq);
            } else {
              next(err);
            }
          }
        );
      });

1 Ответ

2 голосов
/ 25 февраля 2020

Ваша проблема связана с file.downloadUrl. Это поле не гарантированно работает и не должно использоваться для загрузки файлов.

Правильный способ сделать это - использовать вместо этого свойство webContentLink. Вы можете посмотреть здесь для справки.

...