subir servidor script manejo llamar guardar desde con archivos archivo abrir javascript ajax filenames file-type content-disposition

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, ''''); } } }

Más aquí

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)