通过POST请求发送文件流时出现错误

时间:2019-08-29 07:23:36

标签: javascript node.js reactjs google-drive-api axios

我创建了一个网络服务来与Google Drive API连接。另外还有一个使用react js前端开发的系统。我需要通过我开发的Web服务将文件从React System发送到Google Drive。为此,我使用了文件流。发送时,出现错误消息“ part.body.pipe不是函数”。这来自Google Drive API。

下面的代码是我发送的POST请求的示例代码。

const axios = require('axios');
const fs    = require('fs');

const stream = fs.createReadStream('./download.jpg');

axios.post('http://localhost:3008/google-drive/upload-file', {
        stream,
        name: 'add.jpg',
        mimeType: 'image/jpeg',
    }
)
.then((res) => {
    console.log(`statusCode: ${res.statusCode}`)
    console.log(res)
})
.catch((error) => {
    console.error(error)
})

以下是用于文件上传的Google驱动器集成。

function uploadFiles(auth, mainRequest, mainResponse) {
    const drive = google.drive({version: 'v3', auth});

    const {
        stream,
        name,
        mimeType,
    } = mainRequest.body;

    let fileMetaData = {
        name,
    };

    let media = {
        mimeType,
        body: stream,
    };

    drive.files.create({
        media,
        resource: fileMetaData,
        fields: 'id',
    }, (error, file) => {
        if (error) {
            console.log(error);

            return mainResponse.status(200).json({
                message: 'The API returned an error: ' + error
            });
        }

        return mainResponse.status(200).json({
            fileId: file.id
        });
    });
}

我认为问题出在createReadStream中。我不确定我是否正确使用了它。

先谢谢了。 :)

1 个答案:

答案 0 :(得分:-1)

您在fs中弄错了

而是尝试使用此同步功能

fs.readFileSync('filename.jpg','utf8')