将大小和名称传递给JavaScript的FileHandler的.onload事件

时间:2014-06-25 07:28:31

标签: javascript filehandler

如何将文件的名称和大小传递给JavaScript的FileHandler的.onload事件。正如您所看到的,我在下面的Ajax调用中使用了(仍然未声明的)变量sizename。但是,我不得不从getData()函数传递它们。

我发现Pass a parameter to FileReader onload event但它似乎对我没用。

getData('file2093', 
  function(e) { 
    new Ajax.Request('/documents/2093', { 
      asynchronous:true, evalScripts:true, method:'patch', parameters:'document_payload=' + btoa(e.target.result) + '&document_filename=' + btoa(name) + '&document_size=' + btoa(size) 
      }); 
  })

function getData(inputField, onLoadCallback){
    var input = document.getElementById(inputField);
    var file = input.files[0];
    var size = file.size;
    var name = file.name;
    var fr = new FileReader();
    fr.onload = onLoadCallback
    fr.readAsDataURL(file);
}

1 个答案:

答案 0 :(得分:1)

使用bind,在第一个传递给被调用函数之后的参数,以及在函数调用期间传递的任何其他参数。

getData('',function(size,name,e){
...
});
...
fr.onload = onLoadCallback.bind(fr,size,name);

否则将onload设置为调用回调的匿名函数

fr.onload = function(e){
  onLoadCallback(size,name,e);
};

如果您需要访问reader对象,也可以在第二个代码段中传递filereader对象,第一个代码段设置回调函数的上下文,以便您可以通过回调中的this访问reader对象