Javascript Can';t上载文件并将其转换为base64string

Javascript Can';t上载文件并将其转换为base64string,javascript,angular,typescript,Javascript,Angular,Typescript,我正在尝试上载文件,然后将其转换为base64字符串并添加到对象。但似乎不管用。 console.log()每次显示空对象 <input type="file" (change)="onChange($event)" accept="image/jpeg, image/png" /> <input type="submit" value="send" (click)="upload()" /> 这对我来说很好…希望有帮助 uploadFileImage(fileInpu

我正在尝试上载文件,然后将其转换为base64字符串并添加到对象。但似乎不管用。 console.log()每次显示空对象

<input type="file" (change)="onChange($event)" accept="image/jpeg, image/png" />
<input type="submit" value="send" (click)="upload()" />

这对我来说很好…希望有帮助

uploadFileImage(fileInput: any)
{
    var files = fileInput.target.files;
    var file = files[0];

    if (files && file) 
    {
        var reader = new FileReader();

        reader.onload = function(readerEvt: any) 
        {
            var binaryString = readerEvt.target.result;
            var base64 = btoa(binaryString);
            this.product.photos = [];
            this.product.photos.push(base64);
        };
        reader.readAsBinaryString(file);
    }
}

这里的一点是,只有当reader.readAsDataURL()成功加载文件时,才会调用reader.onload。从逻辑上讲,它不应该写在reader.onload中。将readAsDataURL置于onload函数之外,使其保持在onChange函数内。那么它应该会起作用。您的代码应该如下所示

    onChange(fileInput: any) {
        let image: any = fileInput.target.files[0];
        let reader: FileReader = new FileReader();


        reader.onload = () => {
            let photo: AddPhoto = new AddPhoto();
            photo.base64Image = reader.result;
            this.product.photos = [];
            this.product.photos.push(photo);
        };
        reader.readAsDataURL(image);

    }

尝试将第一行inselde“onChange”函数替换为:let image:any=fileInput.target[0]。files;很久以前我就是这样工作的。然后,您必须迭代image变量以获取它可能拥有的多个文件;var data=new FormData();$.each(文件、函数(键、值){data.append(“文件”,值);});想想jquery对我来说会很简单,但现在我正试图用angular2实现它。这里的一件事是,只有当reader.readAsDataURL()成功加载文件时,才会调用reader.onload。从逻辑上讲,它不应该写在reader.onload中。将readAsDataURL置于onload函数之外,使其保持在onChange函数内。“那它就应该起作用了。”卢克·P·伊萨克谢谢,它开始起作用了。我是stackowerflow的新手。我如何标记您的答案?TypeError:this.product未定义。无法从子函数访问类字段
    onChange(fileInput: any) {
        let image: any = fileInput.target.files[0];
        let reader: FileReader = new FileReader();


        reader.onload = () => {
            let photo: AddPhoto = new AddPhoto();
            photo.base64Image = reader.result;
            this.product.photos = [];
            this.product.photos.push(photo);
        };
        reader.readAsDataURL(image);

    }