You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Blob图片URL显示图片?已尝试createObjectURL()方法

解决图片预览的问题

我看你这段代码里有几个关键问题,咱们一步步来修正:

问题1:没必要把Base64 Data URL转成Blob URL

你的path已经是完整的Base64格式的Data URL(data:image/jpeg;base64,...),这种格式可以直接作为图片的src使用,完全不需要再转成Blob URL,多做了无用功。

问题2:Blob构造方式错误

就算你非要转Blob,当前的写法也不对——你直接把Base64字符串塞进Blob了,但Blob需要的是二进制数据,不是编码后的字符串。正确的做法是先把Base64解码成Uint8Array,再传入Blob构造函数。

问题3:Angular中操作DOM的方式不对

你用jQuery直接设置ng-src属性,Angular的双向绑定机制不会识别这个手动修改,应该把图片URL绑定到$scope变量上,让Angular自己更新视图。


正确方案1:直接使用Base64 Data URL(最简单)

修改你的代码,直接把path赋值给绑定的变量:

$scope.preview = function(path) { 
    // path本身就是可直接使用的Data URL
    $scope.previewImageUrl = path; 
}

然后在HTML里这样写:

<img class="image-preview" ng-src="{{previewImageUrl}}" alt="预览图">

正确方案2:如果一定要转成Blob URL(正确解码方式)

如果你因为某些原因必须用Blob URL,那得先解码Base64:

$scope.preview = function(path) { 
    // 先提取Base64部分(去掉前面的data:image/jpeg;base64,)
    var base64Str = path.split(',')[1];
    // 解码Base64成二进制数组
    var byteCharacters = atob(base64Str);
    var byteNumbers = new Array(byteCharacters.length);
    for (var i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }
    var byteArray = new Uint8Array(byteNumbers);
    
    // 创建正确的Blob
    var file = new Blob([byteArray], { type: 'image/jpeg' }); 
    var fileURL = URL.createObjectURL(file); 
    
    // 绑定到scope变量,让Angular更新视图
    $scope.previewImageUrl = fileURL;
}

HTML同样用ng-src="{{previewImageUrl}}"即可。


另外提醒一下:使用Blob URL后,记得在合适的时机(比如视图销毁时)调用URL.revokeObjectURL(fileURL)释放内存,避免内存泄漏哦。

内容的提问来源于stack exchange,提问作者YaSh Chaudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:55:13