html中使用img标签图片无法正常显示

在学习html+css过程中,自己在编辑器里尝试使用img标签来显示图片,是一张鲜花的图片:

 代码如下:刚开始写的是绝对路径,照片无法正常显示:后来经过问别人,别人建议把“\”换成“/”,更改后仍然无法正常显示;经检查,图片路径并无错误。

这是十分疑惑,不知道问题出在哪,于是又把图片移到了和代码同级目录下,看看相对路径是否能够成功。

移动后,将代码改成了

再次运行,浏览器上还是没有成功显示图片,只不过这次与上次的效果不同,之前是直接显示图片加载失败,并显示alt标签中的内容;这次则在显示一直加载,在等待服务器的相应:

 

 经过查资料,在路径前加了一个“.”:

 图片终于正常显示:

 总结:

1.绝对路径无法显示的原因是:

在用浏览器打开网页时帮你虚拟了一个服务器(可以认为在此虚拟服务器外的文件相当于在另一个电脑里),因此你点击webstorm右上角的浏览器图标打开网页时,网页路径是localhost:xxxx而你的图片也显示不出来。

因此尽量使用图片的相对路径

2.

相对路径的“.”是说在同一目录下,因此要记得加“.”
 

### 解决方案概述 当 `img` 标签的 `src` 属性使用 Blob URL 时,图片无法正常显示的原因可能是多方面的。以下是几种常见原因及其对应的解决方案: --- #### 1. **Blob URL 生命周期管理** 如果未正确释放 Blob URL,则可能导致其失效或可访问。需要确保在再需要该 Blob URL 时调用 `window.URL.revokeObjectURL()` 方法。 ```javascript let blobUrl; fetch('image-url') .then(response => response.blob()) .then(blob => { blobUrl = window.URL.createObjectURL(blob); document.getElementById('myImage').src = blobUrl; }) .catch(error => console.error('Error:', error)); // 当组件销毁或需要时撤销对象 URL function cleanup() { if (blobUrl) { window.URL.revokeObjectURL(blobUrl); } } ``` 上述代码通过创建和清理 Blob URL 来避免生命周期问题[^5]。 --- #### 2. **跨平台兼容性** iOS 设备可能存在对特定格式 Blob URL 的解析问题。可以通过调整 MIME 类型或直接返回 Base64 编码字符串的方式解决问题。 - **MIME 类型校验** 确保生成 Blob 对象时指定正确的 MIME 类型(如 `'image/png'` 或 `'image/jpeg'`)。例如: ```javascript const blob = new Blob([arrayBuffer], { type: 'image/png' }); const url = window.URL.createObjectURL(blob); document.querySelector('img').src = url; ``` - **Base64 替代方案** 若发现某些设备支持 Blob URL,可尝试将二进制数据转换为 Base64 字符串并赋值给 `src` 属性。 ```javascript function arrayBufferToBase64(buffer) { let binary = ''; const bytes = new Uint8Array(buffer); for (let i = 0; i < bytes.byteLength; i++) { binary += String.fromCharCode(bytes[i]); } return btoa(binary); } fetch('image-url') .then(res => res.arrayBuffer()) .then(buffer => { const base64Str = `data:image/png;base64,${arrayBufferToBase64(buffer)}`; document.querySelector('img').src = base64Str; }); ``` 此方法特别适合于小型图像文件,但对于大尺寸图片可能会占用更多内存。 --- #### 3. **Meta Referrer 配置** 在部分情况下,服务器端的安全设置会阻止前端加载外部资源。可以在 HTML 文件头部加入如下元标签以禁用 referer 发送行为: ```html <meta name="referrer" content="never"> ``` 这一配置有助于防止因 Referer 导致的权限拒绝问题[^1]。 --- #### 4. **Vue.js 中动态绑定 Src** 如果是在 Vue.js 项目中遇到此问题,需注意模板语法以及响应式更新逻辑。例如,在绑定 `src` 值前应先验证数据有效性。 ```vue <template> <div> <img :src="imageUrl" alt="Dynamic Image"/> </div> </template> <script> export default { data() { return { imageUrl: '' }; }, mounted() { this.loadImage(); }, methods: { loadImage() { fetch('/api/image') .then(res => res.blob()) .then(blob => { this.imageUrl = URL.createObjectURL(blob); }); } } }; </script> ``` 参考上述示例可以有效规避未知路径 (`unknown`) 错误[^3]。 --- #### 5. **Spring Boot 后端处理 BLOB 数据** 如果是从 Spring Boot 应用程序获取 BLOB 数据并通过 API 提供给前端展示,则需要注意序列化过程中的编码方式。建议采用流式传输而非直接暴露字节数组字段。 ```java @GetMapping("/getImage/{id}") public ResponseEntity<byte[]> getImage(@PathVariable Long id) throws IOException { MyEntity entity = repository.findById(id).orElseThrow(() -> new RuntimeException("Not found")); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_PNG); // 设置媒体类型 return new ResponseEntity<>(entity.getImg(), headers, HttpStatus.OK); } ``` 结合前端 Fetch 请求即可完成无缝衔接[^2]。 --- ### 总结 综上所述,针对同场景下的具体需求提供了多种可行的技术手段来应对 `img` 标签 `src` 使用 Blob URL 显示问题。实际开发过程中可根据实际情况灵活选用合适的方法组合实施优化改进。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值