Как исправить Неверный многочастный запрос с ошибкой 0 частей MIME - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь загрузить файл с помощью nodejs express на диск Google. При отправке почтового запроса от почтальона я получил сообщение об ошибке «Недопустимый многочастный запрос с 0 частями mime». Проблема в теле запроса, я думаю, любая идея будетблагодарен за решение этой проблемы или любые предложения, спасибо.

let file = req.files.form_doc_20;

var contentType = file.type || 'application/octet-stream';
let parentId = 'root';

const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";

var data = fs.readFileSync(file.path);
let metadata = {
    title: file.name,
    mimeType: contentType,
    parents: [parentId]
};

var base64Data = Buffer(data, 'base64');

var multipartRequestBody =
    delimiter +
    "Content-Type: application/json\r\n\r\n" +
    JSON.stringify(metadata) +
    delimiter +
    "Content-Type: " + contentType + "\r\n" +
    "Content-Transfer-Encoding: base64\r\n" +
    "\r\n" +
    base64Data +
    close_delim;

let options = {
    url: 'https://www.googleapis.com/upload/drive/v3/files',
    method: "POST",
    headers: {
        'Content-Type': "multipart/related; boundary=\"" + boundary + "\"",
        'Authorization': "Bearer " + req.body.token_configuration.access_token,
    },
    body: multipartRequestBody,
    qs: {
        fields: "id, name, mimeType, modifiedTime, size",
        uploadType: 'multipart'
    },
    json: true
};

helper.http_request(options, (err1, response) => {
    if (err1) {
        return res.json({ msg: 'Failed to upload the file.', error: response });
    }
    else {
        return res.json({ result: response });
    }
});

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, что ваш сценарий почти правильный, и ваш сценарий работает, изменив следующие 3 пункта.

Точки изменения:

  1. При использовании Drive API v3, пожалуйста, используйтесвойство name вместо title.
  2. base64Data файла может быть получено с помощью new Buffer(data).toString('base64').
  3. Когда используется json: true из options, ошибкаInvalid multipart request with 0 mime parts. происходит.Пожалуйста, удалите это.

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

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

1:

От:
title: file.name,
До:
name: file.name,

2:

От:
var base64Data = Buffer(data, 'base64');
До:
var base64Data = new Buffer(data).toString('base64');

3:

Пожалуйста, удалите json: true из options.

Примечание:

  • Этот модифицированный скрипт предполагает, что ваша среда может загружать файлы с помощью Drive API.Если возникает ошибка, связанная с API, убедитесь, что Drive API включен.А также, пожалуйста, подтвердите области, включенные в токен доступа.
  • Я могу подтвердить, что измененный скрипт может загрузить файл на Google Drive.Поэтому, если возникает другая ошибка, считается, что причиной является другая часть, которая не является этим сценарием.

Ссылки:

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

...