node.js - 如何修复 Invalid multipart request with 0 mime parts 错误

标签 node.js file-upload google-api google-drive-api

我正在尝试使用nodejsexpress将文件上传到谷歌驱动器,从 postman 发送帖子请求,我收到错误“带有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 });
    }
});

最佳答案

我认为您的脚本几乎是正确的,并且您的脚本通过修改以下 3 点来工作。

修改点:

  1. 当您使用 Drive API v3 时,请使用 name 的属性而不是title .
  2. base64Data该文件的内容可以通过 new Buffer(data).toString('base64') 检索.
  3. 何时 json: trueoptions使用时,错误为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是否启用。另请确认访问 token 中包含的范围。
  • 我可以确认修改后的脚本可以将文件上传到 Google 云端硬盘。因此,如果出现其他错误,则认为是除此脚本之外的其他部分的原因。

引用文献:

如果这些修改对您的情况没有用,我深表歉意。

关于node.js - 如何修复 Invalid multipart request with 0 mime parts 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54561355/

相关文章:

javascript - 包含已更新变量的文件,并且其他文件看到该更改?

javascript - 使用 FormData 时未获取文件数据

javascript - jQuery 文件上传 - 单次上传多次发送数据

node.js - 从 Google JWT 到使用 React 和 Node.js 访问和刷新 token

php - Google API 刷新 token

node.js - lerna + webpack + babel-loader 问题

node.js - 模块内的 Webpack 未找到 Cheerio

node.js - 尝试从 Node 生成 ruby​​ sass

c# - 如何计算上传文件的百分比?

oauth - 为什么下载字幕会返回“需要登录”?