web-dev-qa-db-fra.com

Comment obtenir le nom de fichier de content-disposition

J'ai téléchargé le fichier comme réponse de ajax. Comment obtenir le nom et le type de fichier de content-disposition et afficher une vignette correspondante. J'ai eu beaucoup de résultats de recherche mais je n'ai pas trouvé le bon chemin.

$(".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);     
        }
    });

sortie de la console: inline; filename=demo3.png

30
Arun Sivan

Voici comment je l'ai utilisé à un moment donné. Je suppose que vous fournissez la pièce jointe en tant que réponse du serveur.

J'ai défini l'en-tête de réponse comme ceci à partir de mon REST service 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, '');
        }
    }
}

EDIT: Modifier la réponse en fonction de votre question - utilisation du mot inline au lieu 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, '');
        }
    }
}

Plus ici

60
Winter Soldier

Essayez cette solution:

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)
4
Osvaldo Cabrera

Il y a un paquet npm qui fait le travail: content-disposition

0
haxpanel