uni-app开发鸿蒙file://media/Photo图片访问跨域问题如何解决?

uni-app开发鸿蒙file://media/Photo图片访问跨域问题如何解决?

报错信息如下:

09:25:46.949 [picker] config: {“action”:“ohos.want.action.photoPicker”,“type”:“singleselect”,“parameters”:{“uri”:“singleselect”,“maxSelectCount”:1,“filterMediaType”:“FILTER_MEDIA_TYPE_IMAGE”,“isSearchSupported”:true,“isPhotoTakingSupported”:false,“isEditSupported”:true,“isOriginalSupported”:false,“completeButtonText”:0}} 09:25:46.949 photoAccessHelper startPhotoPicker inner add createDeleteRequest 09:25:52.133 [picker] result: {“resultCode”:0,“uris”:[“file://media/Photo/207/IMG_1732099562_177/IMG_20241120_184422.jpg”],“isOrigin”:false} 09:25:52.133 [picker] selectResult: {“data”:{“photoUris”:[“file://media/Photo/207/IMG_1732099562_177/IMG_20241120_184422.jpg”],“isOriginalPhoto”:false}} 09:25:52.133 选取的图片是 file://media/Photo/207/IMG_1732099562_177/IMG_20241120_184422.jpg at pages/mine/myconf.vue:405 09:25:54.112 ERR_FAILED 09:25:54.112 Access to image at ‘file://media/Photo/207/IMG_1732099562_177/IMG_20241120_184422.jpg’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, arkweb, data, chrome-extension, chrome, https, chrome-untrusted.


更多关于uni-app开发鸿蒙file://media/Photo图片访问跨域问题如何解决?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app开发鸿蒙file://media/Photo图片访问跨域问题如何解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app开发中,访问鸿蒙设备上的file://media/Photo路径图片时遇到跨域问题,通常是因为浏览器或WebView的安全策略限制了跨域请求。尽管uni-app已经对跨域问题做了一些处理,但在特定平台(如鸿蒙系统)上可能仍需要额外配置或代码调整。以下是一些解决方案,主要侧重于通过代码和配置来解决问题。

1. 使用uni-app的静态资源处理

如果可能,将图片资源放入uni-app项目的static目录中,然后通过相对路径访问。这是最简单且最符合uni-app开发规范的方式。

<!-- 在template中使用静态图片 -->
<image src="/static/images/photo.jpg"></image>

2. 动态加载本地图片(鸿蒙特定处理)

如果必须从file://media/Photo路径加载图片,且该路径是鸿蒙设备上的本地存储,可以尝试使用plus.ioplus.runtime API来读取文件并转换为Base64编码,然后动态设置给<image>标签。

// 假设图片路径为 file://media/Photo/example.jpg
const filePath = '_www/file://media/Photo/example.jpg'; // 注意:这里可能需要调整路径格式以适应uni-app和鸿蒙的解析

// 使用plus.io读取文件并转换为Base64
plus.io.resolveLocalFileSystemURL(filePath, entry => {
  entry.file(file => {
    const reader = new FileReader();
    reader.onloadend = e => {
      const base64Image = e.target.result;
      // 设置图片到image标签
      const imgElement = document.getElementById('myImage');
      imgElement.src = base64Image;
    };
    reader.readAsDataURL(file);
  }, err => {
    console.error('读取文件失败:', err);
  });
}, err => {
  console.error('解析文件路径失败:', err);
});

注意:上述代码中的filePath可能需要根据实际情况调整,因为file://协议在Web环境中通常不被允许,而在uni-app的特定平台上(如鸿蒙),可能需要转换为平台能识别的路径格式。这里假设了一个可能的转换(_www/前缀),但实际情况可能有所不同。

3. 配置CORS(如果适用)

虽然对于本地文件系统路径(如file://)来说,配置CORS通常不适用,但如果是通过HTTP服务器访问资源,确保服务器正确配置了CORS头部。

结论

对于鸿蒙设备上的file://media/Photo图片访问跨域问题,最推荐的方式是尽量避免直接从该路径访问,而是通过uni-app的静态资源机制或动态读取文件内容并转换为Base64编码的方式进行处理。这样可以绕过跨域限制,同时保持代码的简洁和可维护性。

回到顶部