Javascript Can';t上载文件并将其转换为base64string
我正在尝试上载文件,然后将其转换为base64字符串并添加到对象。但似乎不管用。 console.log()每次显示空对象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
<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);
}