获取输入文件中zip文件的文件类型

4

我正在尝试在更改事件上捕获文件:

这是我的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文件时,变量file包含了一个空的type属性。

您有什么想法,为什么会这样,以及如何解决呢?

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

编辑2
以下是我得到的结果:

控制台日志


var file contains a type attributes empty”这句话是什么意思?哪些属性是空的?你的脚本中在哪里使用了 file 变量?输出结果是什么? - Bergi
2
它在这里运行:http://jsfiddle.net/rvd6T/ - enapupe
1个回答

2

你的代码可用。

我尝试了enapupe的fiddle,它可用 http://jsfiddle.net/rvd6T/

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

我的控制台日志 enter image description here


您应该意识到类型会有所不同。

有时它可能是type: "application/x-zip-compressed""application/zip"

您最好只基于文件名,*.zip(以zip结尾且不区分大小写)

但仍必须在服务器端检查它是否实际上是ZIP文件并且可以解压缩


即使使用你的jsfiddle,它在我的端上仍然无法工作:( 我编辑了我的问题并提供了更多详细信息。 - BastienSander
就像我说的那样,基于文件名进行操作,但稍后还需要进行另一个服务器端的检查。 - fedmich
我会使用这个解决方案。只是想知道为什么它不起作用。 - BastienSander
1
某些版本的Chrome(例如Google Chrome)非常严格,并具有此安全功能。不要仅依赖于“type”字段,因为其他浏览器可能会在以后跟随这个做法。 - fedmich
好的,感谢您的解释,但问题是我正在进行数据URL解析,如果我使用文件名,那么我如何区分“application/x-zip-compressed”和“application/zip”?如果我总是使用“application/zip”,是否会有副作用? - BastienSander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接