【问题标题】:nodejs - request - express- use file readStream inside of a post handlernodejs - 请求 - 表达 - 在 post 处理程序中使用文件 readStream
【发布时间】:2023-03-18 07:50:01
【问题描述】:

我正在使用 nodejs 和 express4。我有一个表单-发布方法(文件上传为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】:

    好的,我能够解决这个问题。我不再使用流了:

    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})
        })
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多