![](/img/trans.png)
[英]How to display image downloaded from Azure Blob Storage in React
[英]Display a downloaded blob image
我正在尝试能够显示可以在后端编辑的图像,但这些图像必须在离线时也可用。 为了实现这个目标,我正在使用以下方法下载这些图像(这是唯一对我有用的方法)
download_save_picture(picture_url) {
let splited_url = picture_url.split('/');
var filename = splited_url[splited_url.length - 1];
var config = { responseType: 'blob' as 'blob' };
this.httpClient.get(picture_url, config).subscribe(
data => {
this.file.writeFile(this.file.dataDirectory, filename, data, { replace: true });
},
err => console.error(err),
() => { }
);
}
然后我可以验证这些文件是否存在,并且它们的权重也与0不同,所以我猜到每一个都是正确的,直到这一点。
this.file.checkFile(this.file.dataDirectory, filename)
.then(() => {
alert("File Exist!!!"); // I always enter here
})
.catch((err) => {
alert("ERR : " + err);
});
this.file.resolveLocalFilesystemUrl(this.file.dataDirectory + filename).then((entry: any)=>{
entry.getMetadata((metadata) => {
alert("SIZE: " + metadata.size);
})
}).catch((error)=>{
alert(error);
});
所以下一步是显示路径this.file.dataDirectory + filename
的图像,我该怎么做?
在寻找解决方案并阅读后,我明白我必须:
加载文件二进制内容。
将此二进制内容转换为base 64。
然后用src="data:image/jpeg;base64,"+{{image_in_base64}};
显示它src="data:image/jpeg;base64,"+{{image_in_base64}};
但是直到现在我还没有能够执行步骤1(加载文件内容)和2(将其转换为base 64),我该怎么做?
以下是适合我的代码。
<input #fileinput type="file" [(ngModel)]="file_obj" (click)="resetFileInput()" (change)="onUploadChange()"/>
然后在你的打字稿代码中。
@ViewChild('fileinput') file_input;
file_obj:any;
onUploadChange() {
const file = this.file_input.nativeElement.files[0];
const fReader = new FileReader();
fReader.readAsDataURL(file);
fReader.onloadend = function(event) {
//do whatever you want with the result here.
console.log(event.target['result']);
};
}
resetFileInput() {
this.file_input.nativeElement.value = '';
}
Ionic Native文件与浏览器File对象不同。 似乎有一个名为getFile()的方法,它返回FileEntry对象。这有一个名为method .file()的东西,它返回一个Native文件对象。 然后使用FileReader使用readAsDataURL方法将文件读取为dataURL。
最后,使用LocalStorage而不是文件更容易,更快捷
首先我将函数download_save_picture(picture_url)
保存在localStorage(key)
中的base64中picture_url
中的图像内容,该键将是最后一个/
之后的所有内容,因此如果我们使用URL https://www.w3schools.com/w3css/img_lights.jpg
内容将保存在icon.img_lights.jpg
。
download_save_picture(picture_url) {
let splited_url = picture_url.split('/');
var name = splited_url[splited_url.length - 1];
if (localStorage.getItem('icon.' + name) === null) {
var config = { responseType: 'blob' as 'blob' };
this.httpClient.get(picture_url, config).subscribe(
data => {
var reader = new FileReader();
reader.readAsDataURL(data);
reader.onload = function() {
window.localStorage.setItem('icon.' + name, reader.result);
}
},
err => console.error(err),
() => { }
);
}
}
然后在视图中我用<img src={{useLocalImage(item.image)}}></p>
显示图像,其中useLocalImage
只返回localStorage中保存的内容。
useLocalImage(picture_url) {
let splited_url = picture_url.split('/');
var name = splited_url[splited_url.length - 1];
var icon_name = window.localStorage.getItem('icon.' + name);
return icon_name;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.