背景:
后端使用ABP,从数据库获取图片,然后以byte[]形式返回给客户端,代码如下
public async Task<byte[]> GetMapImage(string Floor, Guid LibraryID)
{
byte[] fileData = null; //数据库图片内容
try
{
var query = _libraryMapRepository.GetAll()
.Where(t => t.LibraryID == LibraryID && t.Floor == Floor);
List libraryMaps = await query.ToListAsync();
if (libraryMaps.Count > 0)
{
LibraryMap libraryMap = libraryMaps[0];
fileData = libraryMap.MapImage;
}
return fileData; //将图片内容返回给客户端
}
catch (Exception ex)
{
return fileData;
}
}
前端使用vue,主要代码如下
// 这里是写在method()里面一个获取图片的方法
async getMapImage() {
if (this.form.libraryId !== null && this.form.floor !== null) {
const res = await GetImageData(this.form.floor, this.form.libraryId) // 调用axio方法GetImageData, res是前端返回的结果
const blob = new Blob(res, { type: 'image/png' }) // new Blob会报错,这是为什么呢?
url = window.URL.createObjectURL(blob)
this.imgurl = url
}
}
// 通过axio获取图片
export function GetImageData(Floor, LibraryID) {
return request({
url: '/EquipmentManageService/GetMapImage',
method: 'get',
responseType: 'blob',
params: { Floor, LibraryID }
})
}
如上面代码所示,const res获取到返回值后,应该怎么处理才好?
或者说怎样先将const res保存为本地图片,然后再将图片控件的src
指向本地图片路径呢?
请求各位指点,期待。
你返回的是base64,直接用下面的就可以啦
this.imgurl="data:image/png;base64,"+mapImage
前端访问图片,不是获取到的是url 地址吗? 做下载用文件流吗? 后端转换,前端下载再转换然后展示,麻烦的一逼
后端放开接口,
前端vue发起网络请求,搞掂