我的angular2应用程序中有一个文件上传,它将文件以字节数组的形式发送到the服务。我使用文件读取器创建一个bytearray,它有一个onload-event。在这种情况下,我不能使用this.uploadService引用我的uploadService。
public uploadHandler(event) {
var reader = new FileReader();
reader.onload = function() {
var arrayBuffer = this.result, array = new Uint8Array(arrayBuffer), binaryString = String.fromCharCode.apply(null, array);
//this.uploadService.DoUpload(binaryString);
}
reader.readAsArrayBuffer(event.files[0]);
}我试着使用胖箭头,但我不能再引用结果。
reader.onload = () => {
//this.result does not exist anymore!
var arrayBuffer = result, array = new Uint8Array(arrayBuffer), binaryString = String.fromCharCode.apply(null, array);
this.uploadService.DoUpload(binaryString);
}发布于 2017-07-26 17:50:40
胖箭头是正确的方向。您也可以从reader变量中获得结果,而不是这样。所以它可能看起来像这样
public uploadHandler(event) {
var reader = new FileReader();
reader.onload = () => {
var arrayBuffer = reader.result;
var array = new Uint8Array(arrayBuffer);
var binaryString = String.fromCharCode.apply(null, array);
this.uploadService.DoUpload(binaryString);
};
reader.readAsArrayBuffer(event.files[0]);
}发布于 2017-07-26 17:47:22
我会试一试:
reader.onload = (event: any) => {
console.log(event.target.result); // result should exist
};发布于 2017-07-26 18:42:30
我认为这应该可以解决您的问题,或者至少是一些看起来类似的方法,因为您在this绑定方面有问题。
public uploadHandler(event) {
var reader = new FileReader();
var that = this;
reader.onload = function() {
var arrayBuffer = this.result, array = new Uint8Array(arrayBuffer), binaryString = String.fromCharCode.apply(null, array);
that.uploadService.DoUpload(binaryString);
}
reader.readAsArrayBuffer(event.files[0]);
}https://stackoverflow.com/questions/45323244
复制相似问题