下载被 Chrome 阻止的 xml 和 svg 文件的 zip 存档(无论是否为空)



我想下载放置在单独文件夹中的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以来,该错误消失了。

相关内容

  • 没有找到相关文章

最新更新