J'ai un fichier audio enregistré localement que je veux lire, télécharger sur un serveur via ajax et ensuite stocker sur le serveur. Quelque part le long de ce processus, le fichier est corrompu de sorte que le fichier enregistré sur le serveur ne peut pas être lu.Télécharger un fichier audio codé binaire via ajax et enregistrer
Je vais énumérer des bribes de code simplifié qui montrent le processus que je traverse et j'espère que cela deviendra évident là où je me trompe.
1) Après l'enregistrement audio (en utilisant getUserMedia et MediaRecorder), un fichier local est enregistré:
var audioData = new Blob(chunks, { type: 'audio/webm' });
var fileReader = new FileReader();
fileReader.onloadend = function() {
var buffer = this.result,
uint8Array = new Uint8Array(buffer);
fs.writeFile('path/to/file.webm', uint8Array, { flags: 'w' });
}
fileReader.readAsArrayBuffer(audioData);
2) Plus tard ce fichier local est lu et envoyé à un serveur (en utilisant la bibliothèque axios pour envoyer la demande ajax)
fs.readFile('path/to/file.webm', 'binary', (err, data) => {
var formData = new FormData();
formData.append('file', new Blob([data], {type: 'audio/webm'}), 'file.webm');
axios.put('/upload', formData);
});
3) le serveur gère ensuite cette demande et enregistre les fichier
[HttpPut]
public IActionResult Upload(IFormFile file)
{
using (var fileStream = new FileStream("path/to/file.webm", FileMode.Create))
{
file.CopyTo(fileStream);
}
}
Le fichier audio local peut être joué mais le fichier audio avec succès sur le serveur ne joue pas.
Je ne sais pas si cette information est utile, mais voici les premières lignes de texte que je vois quand j'ouvre le fichier local dans un éditeur de texte (notepad ++):
Et même quand j'ouvrir celui sur le serveur:
donc un peu la même chose ... mais différent. J'ai essayé d'encoder une myriade de manières différentes mais tout semble échouer. Les doigts croisés quelqu'un peuvent me pointer dans la bonne direction ici.