una subir servidor directorio descargar datos con automaticamente attribute archivos archivo ajeno html data-uri

html - subir - php descargar archivo automaticamente



Nombre de archivo del archivo descargado en los datos: Application/octet-stream; (4)

Estoy tratando de descargar un archivo utilizando datos uri de la siguiente manera:

<input type="button" onclick="window.location.href=''data:Application/octet-stream;content-disposition:attachment;filename=file.txt,${details}''" value="Download"/>

El problema es que el archivo descargado siempre se llama ''Desconocido'', lo que trato de usar como nombre de archivo. ¿Es esta la forma correcta de darle un nombre al archivo? ¿O algo más hay que hacer?


Aquí está la solución, solo tiene que agregar un atributo de download para anclar la etiqueta a con el nombre deseado

<a href="data:application/csv;charset=utf-8,Col1%2CCol2%2CCol3%0AVal1%2CVal2%2CVal3%0AVal11%2CVal22%2CVal33%0AVal111%2CVal222%2CVal333" download="somedata.csv">Example</a>

Otra solución es usar JQuery / Javascript.

Propiedad de descarga del ancla


En Safari, es posible que desee utilizar esto e instruir al usuario para ⌘-S el archivo:

window.open(''data:text/csv;base64,'' + encodeURI($window.btoa(content)));

De lo contrario, esto usa Filesaver.js , pero funciona bien:

var downloadFile = function downloadFile(content, filename) { var supportsDownloadAttribute = ''download'' in document.createElement(''a''); if(supportsDownloadAttribute) { var link = angular.element(''<a/>''); link.attr({ href: ''data:attachment/csv;base64,'' + encodeURI($window.btoa(content)), target: ''_blank'', download: filename })[0].click(); $timeout(function() { link.remove(); }, 50); } else if(typeof safari !== ''undefined'') { window.open(''data:attachment/csv;charset=utf-8,'' + encodeURI(content)); } else { var blob = new Blob([content], {type: "text/plain;charset=utf-8"}); saveAs(blob, filename); } }

Nota : hay algunos AngularJS en el código anterior, pero debería ser fácil de descifrar ...


Para aquellos que utilizan otras bibliotecas como angularjs o backbone, puedes probar algo como esto.

$ (''a.download''). attr (''href'', ''data: application / csv; charset = utf-8,'' + $ scope.data);


Tuve el mismo problema y finalmente lo resolví en todos los navegadores que sirven el archivo CSV en el lado del servidor:

const result = json2csv({ data }); res.writeHead(200 ''Content-Type'': ''application/octet-stream'', ''Content-Disposition'': ''attachment;filename=issues.csv'', ''Content-Length'': result.length }); res.end(result);