nodejs-请求-在后期处理程序中快速表达文件readStream

问题描述 投票:3回答:1

我正在使用nodejs和express4。我有一个表单-post方法(文件上传为base64),并将此文件保存到带有流的gridfs中。

这是我的代码:

exports.transcribe = function (gridfs, req, res) {

    const buffer = Buffer.from(req.body.file.split(';base64,')[1], 'base64')
    let contentType = req.body.file.split(';base64,')[0].replace('data:', '')
    streamifier.createReadStream(buffer).pipe(gridfs.createWriteStream({
        filename: uuid.v4() + '.txt',
        content_type: contentType,
        metadata: {
            user: req.user
        }
    }))
    // this is request-promise-native
    request.post({
        headers: {
            'Content-Type': 'multipart/form-data'
        },
        uri: process.env.REST_ENDPOINT,
        // stream is created with streamifier from a buffer object
        formData: {'file': streamifier.createReadStream(buffer)}
    }).then(console.log).catch(console.error)
    res.status(200).json({file: file, user: req.user})
}

该代码在同步执行时有效,但不在请求处理内。

我了解到,可能在发送流之前取消了该流。缺少的是文件的内容。请求本身已执行。

javascript node.js http express nodejs-stream
1个回答
0
投票

确定,我能够解决此问题。我不再使用流了:

exports.transcribe = function (gridfs, req, res) {

    const buffer = Buffer.from(req.body.file.split(';base64,')[1], 'base64')
    let contentType = req.body.file.split(';base64,')[0].replace('data:', '')
    streamifier.createReadStream(buffer).pipe(gridfs.createWriteStream({
        filename: uuid.v4() + '.txt',
        content_type: contentType,
        metadata: {
            user: req.user
        }
    }))
    request.post(process.env.REST_ENDPOINT, {
        headers: {
            'Content-Type': 'multipart/form-data'
        },
        formData: {
            'file': {
                value: buffer,
                options: {
                    filename: 'transcribeme.txt',
                    contentType: contentType
                }
            }
        }
    }).then((data) => {
        console.log(data)
        res.status(200).json({user: req.user})
    }).catch((err) => {
        console.error(err)
        res.status(500).json({user: req.user})
    })

}
© www.soinside.com 2019 - 2024. All rights reserved.