Получить аудио - двоичный файл, хранящийся в моем Mlab - PullRequest
0 голосов
/ 25 мая 2018

По сути, я установил приложение с помощью MediaDevices.getUserMedia WebRTC API.Я записал аудио и все, все хорошо в теории.Но теперь я должен получить аудио, чтобы прослушать их.

Теперь мне интересно, как загрузить аудио пост в моей базе данных MongoDB.Я пытался экспортировать свою базу данных MongoDB, но я получаю только файлы в формате JSON или CSV, а не мои аудиофайлы.

Я слышал о gridFS, но только в контексте обработки изображений.Перед тем, как углубиться в gridFS, я хотел бы узнать ваше мнение о восстановлении звука с помощью Mlab.и MongoDB более широко.Кроме того, gridFS, похоже, предназначена для больших файлов, но в моем случае я просто хочу хранить смехотворно маленькие файлы размером в несколько сотен байтов, так что gridFS кажется излишним?Может быть, есть более эффективное решение?

РЕДАКТИРОВАТЬ: я изо всех сил пытаюсь перевести мои данные, чтобы сохранить их в моей базе данных.

Пока моя консоль возвращает мне:

XML Parsing Error: syntax error

Вот мой App.js:

// post section

async handleSubmit(e){

e.preventDefault();

Axios.post("/api/words",{

"sound":this.state.blob

})

//.then((res) => res.json())

.then((data) => console.log(data))

//pass submitted value to true in order to declench allDelete function

}


(...) 


// blob formatting section :

saveAudio() {

// convert saved chunks to blob

const blob = new Blob(this.chunks, {type: audioType});

this.setState({blob : blob})

Спасибо.

1 Ответ

0 голосов
/ 26 мая 2018

GridFS не нужна для файлов размером менее 16 МБ.Вы можете либо хранить двоичные данные непосредственно в MongoDB, используя двоичный тип BSON , либо кодировать свои двоичные данные и сохранять их в виде строки.Base64 - это обычный выбор кодировки при хранении двоичных данных в виде строк.

После того, как вы извлечете данные из базы данных, вы можете записать их в файл, используя fs.writeFile.

Если вы сохранили данные в двоичном виде, вы можете передать буфер в fs.writeFile.Если вы сохранили свои данные в виде закодированной строки, вы можете передать строку и параметр encoding.

(Если вы хотите передать файл в Express, вы можете установить тип содержимого и отправить данные, используя res.send)

Вот небольшой пример в NodeJS,Это считывает аудиофайл с диска, сохраняет его в базе данных MongoDB как двоичный тип (используя класс Binary драйвера MongoDB), извлекает его из базы данных и записывает в новый файл на диске.

const mongodb = require('mongodb')
const util = require('util')
const fs = require('fs')
const readFile = util.promisify(fs.readFile)
const writeFile = util.promisify(fs.writeFile)

async function main() {
  const client = await mongodb.MongoClient.connect(process.env.MONGO_URI)
  console.log('connected')

  let db = await client.db('dbname')

  // Reading in binary data from a file. data is a buffer.
  let data = await readFile(__dirname + '/sample.mp3')

  // Insert binary data to the database
  let res = await db.collection('coll').insert({data: new mongodb.Binary(data)})
  console.log(res)
  let objectId = res.ops[0]._id

  // Retrieve binary data from the database
  let obj = await db.collection('coll').findOne({_id: objectId})
  console.log(obj)

  // *** This is the key part ***
  // use obj.data.read to get a buffer from the binary data and write that buffer to a file
  await writeFile(__dirname + '/out.mp3', obj.data.read(0, obj.data.length()))

  console.log('done')
}

main()

Несмотря на то, что люди хранят двоичные данные в базе данных, люди, вероятно, чаще всего хранят файлы в файловой системе или в хранилище объектов (например, Amazon S3).Затем они просто сохранят ссылку на этот файл в базе данных и получат этот файл, используя ссылку.Вы можете делать то, что вам удобнее.

...