【问题标题】:How to fix Invalid multipart request with 0 mime parts error如何使用 0 mime 部分错误修复无效的多部分请求
【发布时间】:2019-02-06 19:41:20
【问题描述】:

我正在尝试使用 nodejs express 将文件上传到谷歌驱动器,从邮递员发送发布请求,我收到错误“无效的多部分请求,包含 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 });
    }
});

【问题讨论】:

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


    【解决方案1】:

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

    修改点:

    1. 当您使用 Drive API v3 时,请使用 name 的属性而不是 title
    2. 文件的base64Data可以通过new Buffer(data).toString('base64')检索。
    3. 使用optionsjson: true时,会出现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:

    请从options 中删除json: true

    注意:

    • 此修改后的脚本假设您的环境可以使用 Drive API 上传文件。如果出现API相关的错误,请确认Drive API是否开启。并请确认访问令牌中的范围。
    • 我可以确认修改后的脚本可以将文件上传到 Google Drive。所以如果出现其他错误,则认为不是该脚本的其他部分是原因。

    参考资料:

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

    【讨论】:

    • @Usira 很高兴您的问题得到了解决。也谢谢你。
    • @Usira 你知道处理多个文件的情况吗?我要上传多张图片。
    • @SourabhBhutani,我认为您必须逐个上传,没有一次上传多个文件的文档。
    • @Usira 感谢您提供信息。我想我必须附加文件数组并为每个文件调用googleapis.com/upload/drive/v3/files?uploadType=media api。
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2017-01-14
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多