当前位置: 首页 > 知识库问答 >
问题:

如何从content-disposition获取文件名

皇甫高阳
2023-03-14

我下载了一个文件作为ajax的响应。如何从content-distion中获取文件名和文件类型并显示缩略图。我得到了很多搜索结果,但找不到正确的方法

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

共有3个答案

轩辕实
2023-03-14

或者只是:

var fileName = xhr.getResponseHeader('Content-Disposition').split("filename=")[1];
宗政子琪
2023-03-14

这是对marjon4答案的改进。

选择答案的一种简化方法是像这样使用拆分;

var fileName = xhr.getResponseHeader('content-disposition').split('filename=')[1].split(';')[0];

注意:如果文件名本身包含分号(;),则此解决方案可能无法按预期工作

梁浩
2023-03-14

这是我以前如何使用它的。我假设您提供附件作为服务器响应。

我从我的REST服务response.setHeader("Content-Distion","在; 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, '');
        }
    }
}

编辑:编辑答案以适应您的问题-使用单词inline而不是附件

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

更多

 类似资料:
  • 在常规 HTTP 响应中,Content-Disposition响应标头是指示内容是否预期在浏览器中内联显示的标题,即,作为网页或作为网页的一部分或作为附件下载并且本地保存。 在一个multipart/form-data正文中,HTTP Content-Disposition通用标题是一个标题,可以在多部分主体的子部分中使用,以提供有关它适用的字段的信息。子部分由标题中定义的边界分隔Content

  • 问题内容: 设置和使用Spring 3 的最合适,最标准的方法是什么? 动作看起来像: 尽管该文件是zip文件,所以浏览器始终会下载该文件,但是我想明确提及该文件作为附件,并且还提供与该文件的实际名称无关的文件名。 可能有解决此问题的方法,但是我想知道适当的Spring和实现此目标的方法。 PS这里使用的文件是一个临时文件,当JVM存在时,标记为删除。 问题答案:

  • 问题内容: 我在这里使用答案来尝试通过数据上传进行请求,但是服务器端有不同寻常的要求。该服务器是一个PHP脚本,需要对行,因为它是期待一个文件上传。 但是,在客户端,我想发布一个内存中的缓冲区(在这种情况下为String)而不是文件,但是让服务器像对待文件上传一样处理它。 但是,使用I无法在行上添加必填字段。因此,我尝试使用,但这只是将其放在单独的行上。 我如何才能进入一行,而无需先将其写入文件然

  • 我使用意图action_get_content调用startActivityForResult。有些应用程序返回给我的数据包含以下URI: 内容://media/external/images/media/18122 不知道是图像还是视频或者一些自定义内容。如何使用ContentResolver从这个URI获取实际的文件名或内容标题?

  • 问题内容: 如何从给定的文件路径字符串获取文件名? 例如,如果我有一个文件路径字符串为 我想得到返回结果 谢谢您的帮助。 问题答案: 目标C 迅速

  • 我必须从文件中获取一个数字,有些文件包含字母和数字。比如(dsh8kuebw9)或者有(8)这样的空格,我怎样才能得到这些数字?我试过很多次了。我有一个方法可以找到一个数字出现在一个数字中的方法是count8方法。 parseInt将文件的行转换为整数,但由于在某些文件中有字母,我的方法遇到了问题,因为它只接受整数而不接受字符串