servidor - manejo de archivos en javascript
Cómo obtener el nombre del archivo de la disposición de contenido (3)
Aquí es cómo lo usé en algún momento atrás. Supongo que está proporcionando el archivo adjunto como una respuesta del servidor.
Establecí el encabezado de respuesta de este modo desde mi servicio REST response.setHeader("Content-Disposition", "attachment;filename=XYZ.csv");
function(response, status, xhr){
var filename = "";
var disposition = xhr.getResponseHeader(''Content-Disposition'');
if (disposition && disposition.indexOf(''attachment'') !== -1) {
var filenameRegex = /filename[^;=/n]*=(([''"]).*?/2|[^;/n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) {
filename = matches[1].replace(/[''"]/g, '''');
}
}
}
EDITAR: Editar la respuesta para que se ajuste a su pregunta: use la palabra en inline
lugar de attachment
function(response, status, xhr){
var filename = "";
var disposition = xhr.getResponseHeader(''Content-Disposition'');
if (disposition && disposition.indexOf(''inline'') !== -1) {
var filenameRegex = /filename[^;=/n]*=(([''"]).*?/2|[^;/n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) {
filename = matches[1].replace(/[''"]/g, '''');
}
}
}
Descargué el archivo como respuesta de ajax. Cómo obtener el nombre y el tipo de archivo de la disposición de contenido y la vista en miniatura de los mismos. Obtuve muchos resultados de búsqueda pero no pude encontrar la manera correcta.
$(".download_btn").click(function () {
var uiid = $(this).data("id2");
$.ajax({
url: "http://localhost:8080/prj/" + data + "/" + uiid + "/getfile",
type: "GET",
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
},
success: function (response, status, xhr)
{
var header = xhr.getResponseHeader(''Content-Disposition'');
console.log(header);
}
});
Salida de consola: en inline; filename=demo3.png
inline; filename=demo3.png
No encontré ninguna respuesta en en mi caso. Recibo una disposición de contenido así: en línea; nombre de archivo * = UTF-8''''Dossier% 20de% 20diagnostic% 20technique.pdf
Modifiqué la expresión regular para tratar con una cadena UTF-8 si está presente: var regex = / filename [^; = / n] = (UTF-8 ([''"] ))? (. *) /;
Y aquí está mi función:
function getFileNameByContentDisposition(contentDisposition){
var regex = /filename[^;=/n]*=(UTF-8([''"]*))?(.*)/;
var matches = regex.exec(contentDisposition);
var filename;
if (matches != null && matches[3]) {
filename = matches[3].replace(/[''"]/g, '''');
}
return decodeURI(filename);
}
EDIT: no lo probé mucho. No olvide envolverlo con un try / catch en un código NodeJS.
Pruebe esta solución:
var header = xhr.getResponseHeader(''Content-Disposition'');
var startIndex = header.indexOf("filename=") + 10; // Adjust ''+ 10'' if filename is not the right one.
var endIndex = contentDisposition.length - 1; //Check if ''- 1'' is necessary
var filename = contentDisposition.substring(startIndex, endIndex);
console.log("filename: " + filename)