【问题标题】:FileReader not working in Angular 2FileReader 在 Angular 2 中不起作用
【发布时间】:2018-05-08 11:25:58
【问题描述】:

我正在尝试使用FileReader 上传图像,它在调试模式下工作正常(在this.name = Image.files[0].name; 行上设置断点时),但如果我停用断点则不起作用。 testDetails.image 设置为空字符串。我也试过setTimeout,它也不起作用。

var fileByteArray = '';
const Image = this.AccUserImage.nativeElement;

if (Image.files && Image.files[0]) {
    this.AccUserImageFile = Image.files[0];
}


var fileReader = new FileReader();
fileReader.onload = function (event) {
    var imageData = fileReader.result;
    var bytes = new Uint8Array(imageData);
    //for (var i = 0; i < bytes.length; i++) {
    for (var i = 0; i < bytes.length; ++i) {
        fileByteArray += (String.fromCharCode(bytes[i]));
    }
};
if (fileReader && Image.files && Image.files.length) {
    fileReader.readAsArrayBuffer(Image.files[0]);
    }
}

this.name = Image.files[0].name;
const ImageFile: File = this.AccUserImageFile;

let length = this.form.value.addresses.length;
this.testList = [];
for (let i = 0; i < length; i++) {
    let testDetails = new testDto();
    testDetails.image = btoa(fileByteArray);
}

【问题讨论】:

  • 没找到你。
  • 它将如何使我的代码工作?
  • 我觉得this.name跟image没有关系

标签: angular typescript filereader


【解决方案1】:

也许测试应该在 fileReader.load 函数的末尾,因为您的测试依赖于 fileReader.onload 函数至少完成一次,因此 fileByteArray 不是未定义的。

fileReader.onload = function (event) {
    var imageData = fileReader.result;
    var bytes = new Uint8Array(imageData);
    for (var i = 0; i < bytes.length; ++i) {
        fileByteArray += (String.fromCharCode(bytes[i]));
    }
    if (fileReader && Image.files && Image.files.length) {
      fileReader.readAsArrayBuffer(Image.files[0]);
    }
    for (let i = 0; i < length; i++) {
      let testDetails = new testDto();
      testDetails.image = btoa(fileByteArray);
    }
};

【讨论】:

    【解决方案2】:

    当前实现中存在一些问题,我在下面发布工作代码。第一个问题是我使用 JavaScript 样式调用 onload 函数。第二个问题是我必须将所有代码放在onload 函数中,因为readAsArrayBuffer 是一个异步调用。

    var fileByteArray = '';
    const Image = this.AccUserImage.nativeElement;
    if (Image.files && Image.files[0]) {
        this.AccUserImageFile = Image.files[0];
    }
    var fileReader = new FileReader();
    
    fileReader.onload = (e) => {
        var imageData = fileReader.result;
        var bytes = new Uint8Array(imageData);
        for (var i = 0; i < bytes.length; ++i) {
            fileByteArray += (String.fromCharCode(bytes[i]));
        }
    
        this.name = Image.files[0].name;
        const ImageFile: File = this.AccUserImageFile;
        let length = this.form.value.addresses.length;
        this.testList = [];
        for (let i = 0; i < length; i++) {
            testDetails.image = btoa(fileByteArray);
        }
    }
    fileReader.readAsArrayBuffer(Image.files[0]);
    

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多