Estoy tratando de descargar un archivo csv presente en mi cubo s3 usando una URL prefirmada que obtengo de mi servidor back-end. Puedo descargar el archivo completo, pero en la última fila aparecen algunos caracteres no deseados
Este es el archivo csv que obtengo después de la descarga
sepal_length,sepal_width,petal_length,petal_width,species 6.9,3.1,5.4,2.1,virginica 6.7,3.1,5.6,2.4,virginica 6.9,3.1,5.1,2.3,virginica 6.8,3.2,5.9,2.3,virginica 6.7,3.3,5.7,2.5,virginica 6.7,3.0,5.2,2.3,virginica 6.3,2.5,5.0,1.9,virginica 6.5,3.0,5.2,2.0,virginica 6.2,3.4,5.4,2.3,virginica 5.9,3.0,5.1,1.8,virginica MÏoKó ×Ô]ü°
Como puede ver, el archivo se agrega con algunos valores basura (probablemente debido a algún problema de codificación)
Cuando ejecuto el comando de archivo en mi terminal, obtengo
file Download.csv >>> Download.csv: data
Estoy usando dos mutaciones, una buscará la URL prefirmada y la otra descargará el archivo de s3.
useGetPresignedDowloadUrl.mutate( (some_string), { onSuccess: (data, variables, context) => { const s3Data = data as {requestUrl: string, headers: any} downloadExecutionOutputFromS3.mutate( ({requestUrl: s3Data.requestUrl as string, headers: s3Data.headers}), { onSuccess: (data, variables, context) => { download(data as Blob, "Downloaded.csv") } } ) }, } )
Dentro de la mutación downloadExecutionOutputFromS3 estoy usando la siguiente función asíncrona
s3DownloadRequest = async function (url, headers) { // url and headers coming from backend const response = await fetch(url, {method: 'GET', headers: headers}) return response.blob() }
Y mi función de descarga parece
function download(blob: Blob, filename: string) { let newBlob = new Blob([blob], {type: 'text/plain'}); const url = window.URL.createObjectURL(newBlob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; // the filename you want a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); window.URL.revokeObjectURL(url); }