我想下载放置在单独文件夹中的xml和svg文件的zip存档:
+archive.zip
+imgs
test.svg
test1.svg
test2.svg
+xml
highway.xml
如果我在 imgs 文件夹中放置了三个以上的 svg 文件(即使有空的 svg 和 xml 文件),Chrome 也会将存档检测为恶意文件。
我用Chrome 48和49进行了测试(我目前的Chrome版本是49.0.2623.87 m)。我对Firefox 44和IE 10没有问题。
这是我的简单html页面(读取和下载文件):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<button id="readAndDownloadButton" type="button" onclick="toggleSelectFileInput()" class="clickable">readAndDownloadButton</button>
<input id="zippedConfigFileInput"
type="file"
name="zippedConfigFile"
style="display: none"
onchange="readAndDownloadFile()"
accept="application/zip" />
<script>
function toggleSelectFileInput() {
var inputSelect = document.getElementById('zippedConfigFileInput');
inputSelect.click();
}
function readAndDownloadFile() {
var inputElement = document.getElementById('zippedConfigFileInput');
var file = inputElement.files[0];
var fr = new FileReader();
fr.addEventListener("loadend", function() {
var resultStr = fr.result;
downloadFile(file.name, resultStr);
});
fr.readAsDataURL(file);
}
function downloadFile(name, uri) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
</body>
</html>
我已经在本地测试了由 Glassfish 4.1 服务器提供的此页面,然后通过直接读取 html 文件(没有服务器)给出相同的效果。
我不明白为什么 Chrome 将此存档检测为恶意文件!
如果我删除 xml 文件夹或一个 svg 文件,请按预期下载工作。
更新:我做了更多的测试,似乎Chrome不想下载某些文件的FileReader.readAsDataURL的结果。
我做了一个新的测试页面,只有一个链接,并且作为 href 由 FileReader.readAsDataURL 给出的 zip 存档(带有空的 svg 和 xml 文件)的结果:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<a href="data:application/x-zip-compressed;base64,UEsDBBQAAAAAAOd9aUgAAAAAAAAAAAAAAAAPAAAAeG1sL2hpZ2h3YXkueG1sUEsDBBQAAAAAACF/aUgAAAAAAAAAAAAAAAANAAAAaW1ncy90ZXN0LnN2Z1BLAwQUAAAAAAAhf2lIAAAAAAAAAAAAAAAAFQAAAGltZ3MvdGVzdCAtIENvcGllLnN2Z1BLAwQUAAAAAAAhf2lIAAAAAAAAAAAAAAAAGQAAAGltZ3MvdGVzdCAtIENvcGllICgyKS5zdmdQSwECFAAUAAAAAADnfWlIAAAAAAAAAAAAAAAADwAAAAAAAAAAACAAAAAAAAAAeG1sL2hpZ2h3YXkueG1sUEsBAhQAFAAAAAAAIX9pSAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAgAAAALQAAAGltZ3MvdGVzdC5zdmdQSwECFAAUAAAAAAAhf2lIAAAAAAAAAAAAAAAAFQAAAAAAAAAAACAAAABYAAAAaW1ncy90ZXN0IC0gQ29waWUuc3ZnUEsBAhQAFAAAAAAAIX9pSAAAAAAAAAAAAAAAABkAAAAAAAAAAAAgAAAAiwAAAGltZ3MvdGVzdCAtIENvcGllICgyKS5zdmdQSwUGAAAAAAQABAACAQAAwgAAAAAA">Download</a>
</body>
</html>
这将给出警告。
为了后代...这实际上是来自chrome的错误。
我直接在 https://bugs.chromium.org 上打开了一个帖子。
这是Chrome开发人员之一的最后一封邮件:
我们将重新评估我们这边的竞选规则,看看它是否值得保留。
自Chrome版本51.0.2704.103 m以来,该错误消失了。