How to save a image to HTML5 filesystem with the url of image

后端 未结 5 1560
青春惊慌失措
青春惊慌失措 2021-01-03 05:26

I am trying to use HTML5 system to store images of my website, and I find there are many example to show how to store a local image to your chrome file system but I can\'t f

5条回答
  •  无人及你
    2021-01-03 05:48

    Here the function I use. It use Blob constructor so it works on latest Chrome (thats lacks deprecated BlobBuilder) and works also on old iOS 6 that lacks 'blob' for xhr.responseType.

    In comments you also see code for the deprecated BlobBuilder.

    Notice: you are using XHR so CORS must be enabled!

    window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
    window.requestFileSystem(window.PERSISTENT, 2*1024*1024, onFileSystemSuccess, fail);
    
    
    function onFileSystemSuccess(fileSystem) {
        fs = fileSystem;
        console.log('File system initialized');
    
        saveAsset('http://www.example-site-with-cors.com/test.png');
    }
    
    
    function saveAsset(url, callback, failCallback) {
        var filename = url.substring(url.lastIndexOf('/')+1);
    
        // Set callback when not defined
        if (!callback) {
            callback = function(cached_url) {
                console.log('download ok: ' + cached_url);
            };
        }
        if (!failCallback) {
            failCallback = function() {
                console.log('download failed');
            };
        }
    
        // Set lookupTable if not defined
        if (!window.lookupTable)
            window.lookupTable = {};
    
        // BlobBuilder shim
        // var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
    
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        // xhr.responseType = 'blob';
        xhr.responseType = 'arraybuffer';
    
        xhr.addEventListener('load', function() {
    
            fs.root.getFile(filename, {create: true, exclusive: false}, function(fileEntry) {
                fileEntry.createWriter(function(writer) {
    
                    writer.onwrite = function(e) {
                        // Save this file in the path to URL lookup table.
                        lookupTable[filename] = fileEntry.toURL();
                        callback(fileEntry.toURL());
                    };
    
                    writer.onerror = failCallback;
    
                    // var bb = new BlobBuilder();
                    var blob = new Blob([xhr.response], {type: ''});
                    // bb.append(xhr.response);
                    writer.write(blob);
                    // writer.write(bb.getBlob());
    
                }, failCallback);
            }, failCallback);
        });
    
        xhr.addEventListener('error', failCallback);
        xhr.send();
    
        return filename;
    }
    
    
    
    function fail(evt) {
        console.log(evt.target.error.code);
    }
    

提交回复
热议问题