Google Drive API的多部分/相关请求正文

时间:2018-02-16 09:06:01

标签: javascript node.js google-drive-api multipart

我正在尝试使用多部分/相关请求和Google Auth Library在我的google驱动器文件夹上创建一个pdf文件,该文件是我通过Gmail API下载的。

enter image description here

因此,这是Gmail API发送给我的对象。我可以使用base64topdf创建一个pdf文件。

我的问题是将此文件发送到我的google驱动器文件夹。

这是我的基本代码:

const response = await auth.request({
    url: 'https://www.googleapis.com/upload/drive/v3/files',
    method: 'post',
    headers: {
        'Content-Type': `multipart/related; boundary=${boundary}`
    },
    params: {
        uploadType: 'multipart'
    },
    data
});

我尝试了在this page的帮助下通过数据对象发送文件的不同方法,并查看执行以下操作的google's node API代码:

params.uploadType = 'multipart';
const multipart = [
    {'Content-Type': 'application/json', body: JSON.stringify(resource)}, {
        'Content-Type':
        media.mimeType || (resource && resource.mimeType) || defaultMime,
        body: media.body  // can be a readable stream or raw string!
    }
];
const boundary = uuid.v4();
const finale = `--${boundary}--`;
const rStream = new stream.PassThrough();
const isStream = isReadableStream(multipart[1].body);
headers['Content-Type'] = `multipart/related; boundary=${boundary}`;
for (const part of multipart) {
    const preamble =
        `--${boundary}\r\nContent-Type: ${part['Content-Type']}\r\n\r\n`;
    rStream.push(preamble);
    if (typeof part.body === 'string') {
        rStream.push(part.body);
        rStream.push('\r\n');
    } else {
        part.body.pipe(rStream, {end: false});
        part.body.on('end', () => {
            rStream.push('\r\n');
            rStream.push(finale);
            rStream.push(null);
        });
    }
}
if (!isStream) {
    rStream.push(finale);
    rStream.push(null);
}
options.data = rStream;

我尝试使用Buffers,普通字符串...我总是最终得到Error: Malformed multipart body.或PDF,只显示Gmail API对象的数据为纯字符串。

找不到关于如何使用javascript而不使用表单数据的任何内容!任何人都可以帮助我吗?

0 个答案:

没有答案