如何在Safari中使用JavaScript保存大型(8MB)文件?

时间:2012-09-05 09:32:26

标签: javascript html5 safari download

我正在寻找一种在Safari中保存大文件(正好是8兆字节)的方法。我尝试过使用URI方案以及eligreyFileSaver和flash插件Downloadify。所有这些都导致Safari分配内存,直到Web工作进程达到大约2千兆字节,然后Safari崩溃。

我意识到之前有类似这样的问题,但我已经尝试了所有问题导致的所有问题。链接:

此代码适用于Firefox&谷歌浏览器(使用eligreyFileSaver库进行saveAs):

function io_saveData (){
    var bb;
    var buffer;
    var data;

    alert ("The file will now be saved.");

        bb = new BlobBuilder();
        for (var i = 0;i<kMapHeight;i++){
            var stduint8 = new Uint8Array (uint16map[i].buffer);
            var stduint8LittleEndian = new Uint8Array (kMapWidth*2);

            //byte swap work around
            for (var j = 0;j<stduint8.length;j+=2){
                stduint8LittleEndian [j] = stduint8 [j+1]
                stduint8LittleEndian [j+1] = stduint8 [j];

            }

            bb.append(stduint8LittleEndian.buffer);
        }

        var blob = bb.getBlob("example/binary");
        saveAs(blob, "Data File");

        bb = null;
        buffer = null;
        data = null;
}

我正在寻找Safari的方法来创建下载而不会崩溃。部署区域是Mac OS X,因此每台机器都将内置apache和PHP,我宁愿不采取这种方式。

2 个答案:

答案 0 :(得分:1)

你走了。首先将文件存储在HTML5文件系统中,并在完成数据存储后使用filesaver api进行下载。我一直在研究它,并且在阻止UI和浏览器崩溃的情况下取得了不错的成绩。最好在网络工作者中做到这一点,以获得应用程序的性能。

这是一篇有用的文章。

TEMPORARY storage has a default quota of 50% of available disk as a shared pool. (50GB => 25GB) (Not restricted to 1GB anymore)

http://updates.html5rocks.com/tag/filesystem

答案 1 :(得分:0)

不幸的是,Safari7似乎不支持编写文件。

https://github.com/eligrey/FileSaver.js/issues/12

http://caniuse.com/#feat=filesystem