Puedo cargar correctamente archivos de audio en AWS S3 , sin embargo, los archivos no se reproducen, ya sea que se descarguen o reproduzcan en el navegador. Los archivos tienen un tamaño de filesize .
Estoy cargando un objeto audioBlob en AWS S3 :
const [audioBlob, setAudioBlob] = useState(null) const submitVoiceMemo = async () => { try { await fetch('/api/createVoiceMemo', { method: 'PUT', body: audioBlob }) } catch (error) { console.error(error) } } Esta es la ruta API :
module.exports = requireAuth(async (req, res) => { try { AWS.config.update({ accessKeyId: process.env.AWS_ACCESS_KEY_1, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY_ID, region: 'us-east-2', signatureVersion: 'v4' }) const s3 = new AWS.S3(); const uuid = randomUUID() const s3Params = { Bucket: 'waveforms', Key: `voicememo/${uuid}.mp3`, Body: req.body, ContentType: 'audio/mpeg', ACL: 'public-read' } await s3.upload(s3Params).promise() } catch (e) { res.status(500).json({ error: e.message }) } }) Según esta pregunta, he confirmado que req.body es una string .
El archivo que recibe S3 tiene un tamaño de filesize y el tipo de contentType correcto cuando se comprueba en la S3 console . Simplemente no se puede reproducir cuando se descarga o se reproduce directamente en el navegador.
A continuación se muestra cómo se audioBlob y también audioFile (un MP3) (básicamente, el usuario graba una nota de voz y cuando hace clic en stopRecording la grabación, el audio sin procesar se almacena como state ):
const [audioBlob, setAudioBlob] = useState(null) const [blobURL, setBlobUrl] = useState(null) const [audioFile, setAudioFile] = useState(null) const stopRecording = () => { recorder.current .stop() .getMp3() .then(([buffer, blob]) => { const file = new File(buffer, 'audio.mp3', { type: blob.type, lastModified: Date.now() }) setAudioBlob(blob) const newBlobUrl = URL.createObjectURL(blob) setBlobUrl(newBlobUrl) setIsRecording(false) setAudioFile(file) }) .catch(e => console.log(e)) } ¿Cómo puedo almacenar correctamente el audio generado en el front-end, en S3 ?