Я использую nodejs и express4.У меня есть метод post-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})
}
код работает, когда выполняется синхронно, но не внутри обработки запроса.
Я читал о том, что, возможно, поток отменен, прежде чем я смогу его отправить.Чего не хватает, так это содержимого файла.Сам запрос выполняется.
** edit **
ok Я смог обойти проблему.Я больше не использую потоки:
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})
})
}