`
oji445gj
  • 浏览: 13967 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

(推荐读)reading local files in javascript 在chrome中开发读取当地文本

 
阅读更多

(推荐读)reading local files in javascript 在chrome中开发读取当地文本
22小时前
  Slicing a file   In some cases reading the entire file into memory isn't the best option. For example, say you wanted to write an async file uploader. One possible way to speed up the upload would be to read and send the file in separate byte range chunks. The server component would then be responsible for reconstructing the file content in the correct order.   Lucky for us, the File interface supports a slice method to support this use case. The method takes a starting byte as its first argument, ending byte as its second, and an option content type string as a third. The semantics of this method changed recently, so it has been vendor-prefixed:   if (file.webkitSlice) {   var blob = file.webkitSlice(startingByte, endindByte); } else if (file.mozSlice) {   var blob = file.mozSlice(startingByte, endindByte); } reader.readAsBinaryString(blob); The following example demonstrates reading chunks of a file. Something worth noting is that it uses the onloadend and checks the evt.target.readyState instead of using the onload event.      #byte_content {     margin: 5px 0;     max-height: 100px;     overflow-y: auto;     overflow-x: hidden;   }   #byte_range { margin-top: 5px; }     Read bytes:     1-5   6-15   7-8   entire file         function readBlob(opt_startByte, opt_stopByte) {       var files = document.getElementById('files').files;     if (!files.length) {       alert('Please select a file!');       return;     }       var file = files[0];     var start = parseInt(opt_startByte) || 0;     var stop = parseInt(opt_stopByte) || file.size - 1;       var reader = new FileReader();       // If we use onloadend, we need to check the readyState.     reader.onloadend = function(evt) {       if (evt.target.readyState == FileReader.DONE) { // DONE == 2         document.getElementById('byte_content').textConten t = evt.target.result;         document.getElementById('byte_range').textContent =              ['Read bytes: ', start + 1, ' - ', stop + 1,              ' of ', file.size, ' byte file'].join('');       }     };       if (file.webkitSlice) {       var blob = file.webkitSlice(start, stop + 1);     } else if (file.mozSlice) {       var blob = file.mozSlice(start, stop + 1);     }     reader.readAsBinaryString(blob);   }      document.querySelector('.readBytesButtons').addEve ntListener('click', function(evt) {     if (evt.target.tagName.toLowerCase() == 'button') {       var startByte = evt.target.getAttribute('data-startbyte');       var endByte = evt.target.getAttribute('data-endbyte');       readBlob(startByte, endByte);     }   }, false);  Example: Slicing a file. Try it!    Read bytes:  1-5  6-15  7-8  entire file Monitoring the progress of a read   One of the nice things that we get for free when using async event handling is the ability to monitor the progress of the file read; useful for large files, catching errors, and figuring out when a read is complete.   The onloadstart and onprogress events can be used to monitor the progress of a read.   The example below demonstrates displaying a progress bar to monitor the status of a read. To see the progress indicator in action, try a large file or one from a remote drive.      #progress_bar {     margin: 10px 0;     padding: 3px;     border: 1px solid #000;     font-size: 14px;     clear: both;     opacity: 0;     -moz-transition: opacity 1s linear;     -o-transition: opacity 1s linear;     -webkit-transition: opacity 1s linear;   }   #progress_bar.loading {     opacity: 1.0;   }   #progress_bar .percent {     background-color: #99ccff;     height: auto;     width: 0;   }     Cancel read 0%      var reader;   var progress = document.querySelector('.percent');     function abortRead() {     reader.abort();   }     function errorHandler(evt) {     switch(evt.target.error.code) {       case evt.target.error.NOT_FOUND_ERR:         alert('File Not Found!');         break;       case evt.target.error.NOT_READABLE_ERR:         alert('File is not readable');         break;       case evt.target.error.ABORT_ERR:         break; // noop       default:         alert('An error occurred reading this file.');     };   }     function updateProgress(evt) {     // evt is an ProgressEvent.     if (evt.lengthComputable) {       var percentLoaded = Math.round((evt.loaded / evt.total) * 100);       // Increase the progress bar length.       if (percentLoaded  Example: Monitoring the progress of a read. Try it!     Cancel read 0% Tip: To really see this progress indicator in action, try a large file or a resource on a remote drive.   References File API specification FileReader interface specification Blob interface specification FileError interface specification ProgressEvent specification
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics