Проблема с настройкой имени файла при использовании Google Drive REST API для возобновляемых загрузок - PullRequest
0 голосов
/ 28 февраля 2020
async function createResumableSession(filePath, authClient){
try {
  const fileStats = await statsAsync(filePath);
  const fileSize = fileStats.size;

  const postResult = await new Promise((resolve, reject)=>{
    request({
            method: 'post',
            url: 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable',
            followAllRedirects: true,
            headers: {
              Authorization: "Bearer " + authClient.credentials.access_token,
              "X-Upload-Content-Length": `${fileSize}`,
              "Content-Length": "0",
              "Content-Type": "application/json; charset=UTF-8"
             },
            body:JSON.stringify({
              title: "myfile.backup"
            })
          }, function (error, response) {
                if (error) 
                    return reject(error);

                resolve({
                    statusCode: response.statusCode,
                    location: response.headers.location,
                    body: response.body
                });
            })
        })

        return {
            postResult,
            fileSize
        }
    } catch (error) {
        throw error;
    }
}

У меня есть эта функция, чтобы создать возобновляемую загрузку в API Google Диска, она правильно создает сеанс, но я не могу задать имя файла, после завершения загрузки имя файла всегда заканчивается как "без названия"

1 Ответ

0 голосов
/ 29 февраля 2020

Как насчет этой модификации?

Точки модификации:

В вашем скрипте с конечной точки https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable обнаружено, что вы используете Drive API v3. В этом случае для установки имени файла необходимо использовать свойство name. В вашем скрипте используется title. В данном случае это для Drive API v2. Поэтому, пожалуйста, измените его следующим образом.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

С:
title: "myfile.backup"
Кому:
name: "myfile.backup"

Ссылка:

Если это не было прямым решением вашей проблемы, я прошу прощения.

Добавлено:

В качестве простого примера сценария я добавил пример сценария. В этом примере сценария текстовый файл загружается с помощью возобновляемой загрузки. В этом случае файл загружается как имя файла «sample». И вы можете увидеть текст foo в загруженном файле.

Пример сценария:

const request = require('request');
const accessToken = "###";  // Please set your access token.

request({
  method: 'POST',
  url: 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable',
  headers: {
    "Authorization": `Bearer ${accessToken}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({name: "sample", mimeType: "text/plain"})
}, (err, res) => {
  if (err) {
    console.log(err);
    return;
  }
  request({
    method: 'PUT',
    url: res.headers.location,
    headers: {"Content-Range": "bytes 0-2/3"},
    body: Buffer.from("foo")
  }, (err, res) => {
    if (err) {
      console.log(err);
      return;
    }
    console.log(res.statusCode)
    console.log(res.body)
  });
});
  • Используя свойство name, метаданные файла имеют имя файла sample.

Но, к сожалению, из вашего ответа я не могу понять вашу текущую проблему. Так я могу спросить вас о подробной информации о the problem persists? И чтобы правильно понять вашу ситуацию, можете ли вы предоставить подробный поток и весь сценарий для воспроизведения вашей проблемы? Конечно, пожалуйста, удалите вашу личную информацию. Этим я хотел бы подтвердить это. Если вы можете сотрудничать, чтобы решить вашу проблему, я рад.

...