【问题标题】:Getting the file type of a zip file in input file在输入文件中获取 zip 文件的文件类型
【发布时间】:2014-05-28 14:20:38
【问题描述】:

我正在尝试在 input[type=file] 更改事件中捕获文件:

这是我的 HTML:

<input type="file" id="file-upload" name="file-upload">

这是我的 JavaScript(使用 jQuery):

$('#file-upload').bind("change", function(e){
    var file = (e.srcElement || e.target).files[0];
    console.log(e);
}

它适用于图像、txt、doc、docx、xlsx 等等等,但不适用于 zip 文件。 当我尝试使用 zip 文件时,var 文件包含一个空的类型属性。

你知道为什么以及如何得到它吗?

编辑 1 我在 Windows 7 中使用 Chrome 浏览器。我的文件使用 7zip 压缩。

编辑 2 这是我得到的:

【问题讨论】:

  • 你所说的“var 文件包含一个空的类型属性”是什么意思?您在脚本中哪里使用file?它输出什么?
  • 在这里工作:jsfiddle.net/rvd6T

标签: javascript jquery mime-types input-type-file


【解决方案1】:

您的代码有效。

我试过 enapupe 的小提琴,它可以工作 http://jsfiddle.net/rvd6T/

$('#file-upload').bind("change", function(e){
var file = (e.srcElement || e.target).files[0];
console.log(file);
console.log(e);
});

我的控制台日志


您应该知道类型会有所不同。

有时会是 type: "application/x-zip-compressed""application/zip"

您很可能应该只基于 文件名 而不是, *.zip(以 zip 结尾且不区分大小写)

但如果它实际上是一个 ZIP 文件并且可解压缩,仍然必须在服务器端检查它

【讨论】:

  • 它对我不起作用,即使使用你的 jsfiddle :( 我更精确地编辑了我的问题。
  • 就像我说的,改为基于文件名。但稍后再进行服务器端检查
  • 我会使用这个解决方案。只是想知道为什么它不起作用。
  • 某些版本的 Chrome(例如 Google Chrome)非常严格,并具有此安全功能。只是不要依赖“类型”字段,因为其他浏览器也可能会在稍后跟进
  • 好的,感谢您的解释,但问题是我正在制作一个 dataUrlParsing,所以如果我使用文件名,我将如何区分“application/x-zip-compressed”和“application/zip”例如 ?如果我总是放“application/zip”会有副作用吗?
猜你喜欢
  • 2017-05-08
  • 2017-07-17
  • 2019-02-16
  • 2013-02-16
  • 2013-10-09
  • 1970-01-01
  • 2015-04-09
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多