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);