2016-12-02 65 views
11

I作为ajax的响应下载文件。如何从内容处置中获取文件名和文件类型并显示它的缩略图。我有很多搜索结果,但找不到正确的方法。如何从内容处置获取文件名

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

        } 
       }); 

控制台输出:inline; filename=demo3.png

+0

控制台说什么? – Matthew

+0

你为什么要设置'window.location.href =“http:// localhost:8080/prj /”+ data +“/”+ uiid +“/ getfile”;'?这会导致浏览器离开页面并显示该URL。如果您已离开该页面,您希望如何显示图片的缩略图?为什么需要服务器建议您将文件保存为生成缩略图的文件名? – Quentin

+1

从内容处置获取文件名是一个问题。您不能从中获取文件类型,至少不可靠,这就是内容类型标头的用途。缩略图显示将来自数据,是一个完全独立的问题。 – Quentin

回答

23

这是我如何使用它的某个时候回来。 我假设你提供附件作为服务器响应。

我设置的响应头像这样从我的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, ''); 
     } 
    } 
} 

编辑: 编辑答案,以满足您question-使用这个词inline代替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

您的正则表达式将匹配filenameXXX = ......或inlineXXXX = .... – Rouliboy