在Typescript中将图像转换为base64字符串
Converting Image to base64 string in Typescript
我正在尝试 post base64 字符串到我的 api 从 Angular 5
首先我必须将它从图像转换为 base64,在互联网和 MDN 上查看后我开发了一个方法
OnIDChange(event) {
var file = event.target.files[0];
var reader = new FileReader();
reader.onloadend = this.handleReaderLoaded.bind(this, "Id");
reader.readAsBinaryString(file);
}
和
handleReaderLoaded(readerEvt:any, indicator: string) {
var binaryString = readerEvt.target.result;
if (indicator == "Id") {
this.Model.IDPhoto = btoa(binaryString);
}
}
我必须将这个 base64 存储在模型 属性 中 post 它在 api
中
但在控制台中它在
上给出错误 "Cannot read property 'result' of undefined"
var binaryString = readerEvt.target.result;
如何将图像转换为 base64,如果有另一种更合适的方法而不是这种方法(任何 npm 包或其他东西,然后也让我知道)
提前致谢。
来自 MDN 的参考
MDN Link
您需要使用readAsDataUrl()
:
function getBase64(event) {
let me = this;
let file = event.target.files[0];
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
//me.modelvalue = reader.result;
console.log(reader.result);
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
将图像读取为 base64 :
selectFile(event){
var files = event.target.files;
var file = files[0];
if (files && file) {
var reader = new FileReader();
reader.onload =this.handleFile.bind(this);
reader.readAsBinaryString(file);
}
}
handleFile(event) {
var binaryString = event.target.result;
this.base64textString= btoa(binaryString);
console.log(btoa(binaryString));
}
***********************************************************************************
或
替代使用 NPM 包:
https://www.npmjs.com/package/alife-file-to-base64
安装:npm install alife-file-to-base64 --save
将依赖项添加到您的项目
将 AlifeFileToBase64Module 导入您的项目并在导入部分包含模块
import { AlifeFileToBase64Module } from 'alife-file-to-base64';
@NgModule({
declarations: [
],
imports: [
AlifeFileToBase64Module
],
providers: [],
bootstrap: [AppComponent]
})
在项目中任何地方使用的语法:
<input type="file" alife-file-to-base64 (onFileChanged)="onFileChanges($event)" [(fileModel)]="files" />
- onFileChanged :将在用户选择文件时调用。它
将包含文件名、文件大小、类型和 base64。
- fileModel : 设置组件变量的值
这是我上传个人资料图片所做的事情我还检查了小于 512KB 的大小,然后我在下一个功能API 中将该图片发布到我的
我已经使用 FileReader() 和 readAsDataURL() 将文件转换为 base64
/* On Change Profile image*/
onProfileChange(event:any) {
if(event.target.files && event.target.files[0]) {
if(event.target.files[0].type && event.target.files[0].type.split('/')[0] == ["image"] && event.target.files[0].size <= 512000){
this.file = event.target.files[0];
var reader = new FileReader();
reader.onload = (event:any) => {
this.Image = event.target.result;
}
reader.readAsDataURL(event.target.files[0]);
this.isBrowser = false;
} else {
this.isBrowser = true;
this._toastr.error("Max image upload size is 500KB only");
}
}
}
/*end Of On Change profile Image*/
/*Image api*/
AddImage(event: any){
let data=new FormData();
if(this.file){
data.append('image',this.file);
this._db.Post('api/users/image',data).subscribe(b=>{
if(b.IsResult){
this._toastr.success(b.ResultMsg);
this.getProfileDetail();
this.isBrowser=true;
}
});
}else{
this._toastr.error("Something went wrong");
}
}
我正在尝试 post base64 字符串到我的 api 从 Angular 5
首先我必须将它从图像转换为 base64,在互联网和 MDN 上查看后我开发了一个方法
OnIDChange(event) {
var file = event.target.files[0];
var reader = new FileReader();
reader.onloadend = this.handleReaderLoaded.bind(this, "Id");
reader.readAsBinaryString(file);
}
和
handleReaderLoaded(readerEvt:any, indicator: string) {
var binaryString = readerEvt.target.result;
if (indicator == "Id") {
this.Model.IDPhoto = btoa(binaryString);
}
}
我必须将这个 base64 存储在模型 属性 中 post 它在 api
中但在控制台中它在
上给出错误 "Cannot read property 'result' of undefined"var binaryString = readerEvt.target.result;
如何将图像转换为 base64,如果有另一种更合适的方法而不是这种方法(任何 npm 包或其他东西,然后也让我知道)
提前致谢。
来自 MDN 的参考 MDN Link
您需要使用readAsDataUrl()
:
function getBase64(event) {
let me = this;
let file = event.target.files[0];
let reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function () {
//me.modelvalue = reader.result;
console.log(reader.result);
};
reader.onerror = function (error) {
console.log('Error: ', error);
};
}
将图像读取为 base64 :
selectFile(event){
var files = event.target.files;
var file = files[0];
if (files && file) {
var reader = new FileReader();
reader.onload =this.handleFile.bind(this);
reader.readAsBinaryString(file);
}
}
handleFile(event) {
var binaryString = event.target.result;
this.base64textString= btoa(binaryString);
console.log(btoa(binaryString));
}
***********************************************************************************
或
替代使用 NPM 包:
https://www.npmjs.com/package/alife-file-to-base64
安装:npm install alife-file-to-base64 --save
将依赖项添加到您的项目
将 AlifeFileToBase64Module 导入您的项目并在导入部分包含模块
import { AlifeFileToBase64Module } from 'alife-file-to-base64';
@NgModule({
declarations: [
],
imports: [
AlifeFileToBase64Module
],
providers: [],
bootstrap: [AppComponent]
})
在项目中任何地方使用的语法:
<input type="file" alife-file-to-base64 (onFileChanged)="onFileChanges($event)" [(fileModel)]="files" />
- onFileChanged :将在用户选择文件时调用。它 将包含文件名、文件大小、类型和 base64。
- fileModel : 设置组件变量的值
这是我上传个人资料图片所做的事情我还检查了小于 512KB 的大小,然后我在下一个功能API 中将该图片发布到我的
我已经使用 FileReader() 和 readAsDataURL() 将文件转换为 base64
/* On Change Profile image*/
onProfileChange(event:any) {
if(event.target.files && event.target.files[0]) {
if(event.target.files[0].type && event.target.files[0].type.split('/')[0] == ["image"] && event.target.files[0].size <= 512000){
this.file = event.target.files[0];
var reader = new FileReader();
reader.onload = (event:any) => {
this.Image = event.target.result;
}
reader.readAsDataURL(event.target.files[0]);
this.isBrowser = false;
} else {
this.isBrowser = true;
this._toastr.error("Max image upload size is 500KB only");
}
}
}
/*end Of On Change profile Image*/
/*Image api*/
AddImage(event: any){
let data=new FormData();
if(this.file){
data.append('image',this.file);
this._db.Post('api/users/image',data).subscribe(b=>{
if(b.IsResult){
this._toastr.success(b.ResultMsg);
this.getProfileDetail();
this.isBrowser=true;
}
});
}else{
this._toastr.error("Something went wrong");
}
}