html5的fiesystem api 浏览器本地存储

html5的fiesystem api可以存取本地文件
一言不合上代码
<a href="filesystem:http://192.168.139.85/temporary/">filesystem:http://192.168.139.85/temporary/</a></br>
<input type="button" value="create log and /log/log.txt" onclick="create_test()"/></br>
<input type="text" id="delete_file" value="/log/log.txt"/>
<input type="button" value="delete file" onclick="window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onDeleteFile, errorHandler)"/></br>
<input type="button" value="read /log/log.txt" onclick="window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onReadFile, errorHandler)"/></br>
<input type="file" id="myfile" multiple /> </br> 
<input type="button" value="delete dir log" onclick="window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onDeleteDir, errorHandler)"/></br>
<script type="text/javascript">
window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;  

function onMkdir(fs) {
        console.log('mkdir log,  Opened file system: ' + fs.name);
    fs.root.getDirectory('log', {create: true, exclusive: true}, function(dirEntry) {  
            console.log("-----create---/log");
            dirEntry.isDirectory ===  true;
            dirEntry.name == 'log';  
            dirEntry.fullPath == '/log';
        }, errorHandler);  
}
function onInitFile(fs) {
    console.log('create /log/log.txt,  Opened file system: ' + fs.name);
    fs.root.getFile('/log/log.txt', {create: true, exclusive: true}, function(fileEntry) {  
        console.log("-----create---/log/log.txt");
        fileEntry.isFile === true  
        fileEntry.name == 'log.txt'  
        fileEntry.fullPath == '/log/log.txt'  
        fileEntry.createWriter(function(fileWriter) {  
                        fileWriter.onwriteend = function(e) {  
                                console.log('Write completed.');  
                };  
                        fileWriter.onerror = function(e) {  
                                console.log('Write failed: ' + e.toString());  
                };  
  
                // Create a new Blob and write it to log.txt.  
//              var bb = new BlobBuilder(); // Note: window.WebKitBlobBuilder in Chrome 12.  
//              var bb = new window.WebKitBlobBuilder();// in Chrome 12.  
//                      var bb = new (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)();
//              bb.append('hello haoning');  
//                      new Blob(["data"]);
//              fileWriter.write(bb.getBlob('text/plain'));  
//                      http://stackoverflow.com/questions/14527820/does-html-5s-blobbuilder-still-work-in-google-chrome
                fileWriter.write(new Blob(["hello ","haoning"]));  
  
        }, errorHandler);  
  }, errorHandler);  
}
function onReadFile(fs) {  
        console.log('read /log/log.txt,  Opened file system: ' + fs.name);
        fs.root.getFile('/log/log.txt', {}, function(fileEntry) {  
    // Get a File object representing the file,  
    // then use FileReader to read its contents.  
    fileEntry.file(function(file) {  
       var reader = new FileReader();  
       reader.onloadend = function(e) {  
         var txtArea = document.createElement('textarea');  
         txtArea.value = this.result;  
         document.body.appendChild(txtArea);  
       };  
       reader.readAsText(file);  
    }, errorHandler);  
  }, errorHandler);  
}  
function onDeleteFile(fs) {
        console.log('rm <file> ,Opened file system: ' + fs.name);
        fs.root.getFile(document.getElementById("delete_file").value, {delete: true, exclusive: true}, function(fileEntry) {  
                console.log("delete--------log.txt");
                fileEntry.remove(successCallback, opt_errorCallback);  
        }, errorHandler);  
}
function onDeleteDir(fs) {
        console.log('rm -rf log ,Opened file system: ' + fs.name);
    fs.root.getDirectory('log', {delete: true, exclusive: true}, function(dirEntry) {  
        console.log("delete--------log");
    //dirEntry.remove(successCallback, errorHandler);  
    dirEntry.removeRecursively(successCallback, opt_errorCallback); 
  }, errorHandler);  
}

//window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onMkdir, errorHandler);
//window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onInitFile, errorHandler);
//window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onDeleteFile, errorHandler);
//window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onDeleteDir, errorHandler);
//window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onReadFile, errorHandler);

function create_test(){
        window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onMkdir, errorHandler);
        window.requestFileSystem(window.TEMPORARY, 5*1024*1024 , onInitFile, errorHandler);
}

document.querySelector('#myfile').onchange = function(e) {  
        var files = this.files;  
        window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {  
                // Duplicate each file the user selected to the app's fs.  
            for (var i = 0, file; file = files[i]; ++i) {  
              // Capture current iteration's file in local scope for the getFile() callback.  
                        (function(f) {  
                                fs.root.getFile("/log/"+file.name, {create: true, exclusive: true}, function(fileEntry) {  
                        fileEntry.createWriter(function(fileWriter) {  
                                                fileWriter.write(f); // Note: write() can take a File or Blob object.  
                                }, errorHandler);  
                        }, errorHandler);  
                })(file);  
          
            }  
        }, errorHandler);  
};  
//---------------------------------------------
function successCallback(){
        console.log("---->successCallback.");
}
function opt_errorCallback(eee){
        console.log("this error:"+eee);
}
function errorHandler(e) {  
  var msg = '';  
  
  switch (e.code) {  
    case FileError.QUOTA_EXCEEDED_ERR:  
      msg = 'QUOTA_EXCEEDED_ERR';  
      break;  
    case FileError.NOT_FOUND_ERR:  
      msg = 'NOT_FOUND_ERR';  
      break;  
    case FileError.SECURITY_ERR:  
      msg = 'SECURITY_ERR';  
      break;  
    case FileError.INVALID_MODIFICATION_ERR:  
      msg = 'INVALID_MODIFICATION_ERR';  
      break;  
    case FileError.INVALID_STATE_ERR:  
      msg = 'INVALID_STATE_ERR';  
      break;  
    default:  
      msg = 'Unknown Error';  
      break;  
  };  
  
  console.log('Error1: ' + msg);  
} 
//window.webkitStorageInfo.requestQuota(TEMPORARY, 1024*1024, function(grantedBytes) {  
//      console.log("ccccccccccc");
//      window.requestFileSystem(TEMPORARY, grantedBytes, onInitFs, errorHandler);  
//      }, function(e) {  
//  console.log('Error', e);  
//});
</script>


参考http://www.cnblogs.com/zhwl/p/3201975.html



------------------------另一种本地存key value的方法----

<input type="button" onclick="test_save()" value="save"/>
<input type="button" onclick="test_clear()"  value="clear"/>
<pre>
        F12 Resources Local Storage
</pre>
<script type="text/javascript">
var jsonstr={'name':"haoning","no":123};
function save(dataModel){
        console.log(dataModel);
    var value = JSON.stringify(dataModel);//dataModel.serialize();
    window.localStorage['myname'] = value;
    localStorage.setItem("myage",12); 
    return value;
}

function clear(){
        console.log("---clear");
    if(window.localStorage['myname']){
                console.log("---delete myname myage");
        delete window.localStorage['myname']; 
        delete window.localStorage['myage'];       
    }   
}
function test_save(){
        save(jsonstr);
//      clear();
}
function test_clear(){
  clear();
}
//request = indexedDB.open("DataModel");
</script>

key value的形式存在浏览器上


还有一种叫appcache,参考jslinux-network中的吧

猜你喜欢

转载自haoningabc.iteye.com/blog/2302425