![]() |
可爱的长颈鹿 · 现在手里有一堆JSON格式的数据,如何转化成 ...· 1 年前 · |
![]() |
重情义的蟠桃 · SpringBoot接收post请求中单个入 ...· 1 年前 · |
![]() |
一身肌肉的蟠桃 · java.net.unknownhostex ...· 1 年前 · |
![]() |
急躁的伏特加 · QPlainTextEdit 和 ...· 1 年前 · |
![]() |
俊秀的石榴 · LINQ for PHP ...· 1 年前 · |
我希望读取一个文件并使用FileReader对象将其转换为Base 64编码的字符串。下面是我使用的代码:
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result_base64 = evt.target.result;
reader.readAsDataURL(file);
但在本例中,我得到了事件处理程序(onLoadEnd事件)中的转换结果。我想要一种同步方法。是否有一种方法“readAsDataURL”可以直接返回‘结果’的‘变量'result_base64'的值?
同步任务(阻塞)通常是不好的。如果没有真正的理由异步地这样做,我强烈建议使用事件回调。
假设文件被破坏,HTML 5 API无法读取,它不会给出结果。它会破坏代码并阻塞站点。或者,有人可以选择一个10 GB的文件,这将冻结HTML页面,直到文件完全加载。有了这个异步事件处理程序,就能够捕获可能的错误。为了解决回调的限制,我使用了一个简单的技巧:
var ready = false;
var result = '';
var check = function() {
if (ready === true) {
// do what you want with the result variable
return;
setTimeout(check, 1000);
check();
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result = evt.target.result;
ready = true;
reader.readAsDataURL(file);
Check函数,每秒钟检查就绪标志变量是否设置为true。如果是这样,可以确保结果是可用的。
这样做可能不是最好的实践,但我使用这种技术制作了一个Web应用程序,同时运行了10次以上的setTimeout,直到现在还没有遇到任何问题。
在Node.js中,使用
execSync
从
child_process
并让shell同步读取它。将此子进程的输出重定向到父进程。
// Don't forget to use your favorite encoding in toString()
var execSync = require('child_process').execSync;
var fileContents = execSync('cat path/to/file.txt', {stdio: "pipe"}).toString();
var file = $('#myfile')[0].files[0];
var reader = new FileReader();
reader.onload = function(progressEvent) {
//console.log(this.result);
handle(this.result);
reader.readAsText(file);
function handle(temp_lines) {
var inputLines=new Array();
var lines = temp_lines.split('\n');