2016-12-02 2 views
11

I Téléchargé le fichier en réponse à ajax. Comment obtenir le nom de fichier et le type de fichier à partir de la disposition de contenu et afficher la vignette pour cela. J'ai eu beaucoup de résultats de recherche, mais je n'ai pas pu trouver le bon chemin.Comment obtenir le nom de fichier à partir du contenu-disposition

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

+0

Que dit la console? – Matthew

+0

Pourquoi définissez-vous 'window.location.href =" http: // localhost: 8080/prj/"+ données +"/"+ uiid +"/getfile ";'? Cela amènera le navigateur à quitter la page et affichera simplement cette URL. Comment vous attendez-vous à afficher une vignette pour l'image si vous avez quitté la page? Pourquoi avez-vous besoin du nom de fichier que le serveur vous suggère d'enregistrer le fichier afin de générer une miniature? – Quentin

+1

Obtenir le nom de fichier à partir de la disposition de contenu est un problème. Vous ne pouvez pas en extraire le type de fichier, du moins pas de manière fiable, c'est ce à quoi sert l'en-tête content-type. L'affichage des vignettes proviendrait des données et constitue un problème entièrement distinct. – Quentin

Répondre

23

Voici comment je l'ai utilisé quelque temps en arrière. Je suppose que vous fournissez la pièce jointe en tant que réponse du serveur.

Je mis l'en-tête de réponse comme celui-ci de mon service 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, ''); 
     } 
    } 
} 

EDIT: Modification de la réponse en fonction de votre utilisation de question- 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, ''); 
     } 
    } 
} 

More here

+0

Votre expression régulière correspondra à filenameXXX = ...... ou inlineXXXX = .... – Rouliboy