HarmonyOS H5展示沙箱路径里面的图片

目前我们应用从服务器下载了一张图片并把他保存在沙箱路径下面(/data/storage/el2/base/haps/Home/cache/testimage1723538057368.jpg) 请问我们Image直接显示不出来这张照片昵? 我将这个路径传给前端H5, H5页面也显示不出来。

请问对于这种路径 (/data/storage/el2/base/haps/Home/cache/testimage1723538057368.jpg) 的文件图片, 原生Image 以及H5 需要怎么去显示出来?

HarmonyOS
2025-01-09 16:29:44
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

H5中不能直接使用沙箱路径显示图片,可以将图片转为base64显示 ets参考代码:

import { webview } from '@kit.ArkWeb';
import common from '@ohos.app.ability.common';
import fs from '@ohos.file.fs';
import { util } from '@kit.ArkTS';

// 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let pathDir = context.filesDir;
// 应用通用文件路径
let filePath = pathDir + '/picture.png'

let arrayBuff = context.resourceManager.getMediaContentSync($r('app.media.startIcon')).buffer
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, arrayBuff)
fs.closeSync(file);

@Entry
@Component
struct shaxiangtupian {
  private webviewController: webview.WebviewController = new webview.WebviewController();

  build() {
    Column() {
      Web({ src: $rawfile('shaxiangtupian.html'), controller: this.webviewController }).width('100%').height('50%')
      Button("转base64显示图片").onClick(() => {
        let filePath = pathDir + "/picture.png";
        let file1 = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        let array: ArrayBuffer = new ArrayBuffer(fs.statSync(file1.fd).size)
        fs.readSync(file1.fd, array)
        let unit = new Uint8Array(array)
        let base64 = new util.Base64Helper();
        let mystr = "data:image/png;base64," + base64.encodeToStringSync(unit);
        let base64Str = "myFunction(\"" + mystr + "\")"
        this.webviewController.runJavaScript(base64Str)
        console.log(`wsf: resultBase64Str = ${mystr}`)
      })
    }
  }
}

H5参考代码:

<!DOCTYPE html>
  <html>
  <head>
  <title>My Page</title>
  </head>
  <body>
  <div>
  <script>
  function myFunction(base64str) {
    var img = new Image();
    img.width = 200;
    img.height = 200;
    img.src = base64str;
    document.body.appendChild(img);
  }
  </script>
  </div>
  </body>
  </html> 

访问带域名的网络图片,需要声明网络权限ohos.permission.INTERNET,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/declare-permissions-V5

1、沙箱路径是系统设置的统一路径,base64路径可参考上面代码生成,沙箱路径参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-sandbox-directory-V5#应用沙箱目录与应用沙箱路径

2、无法访问带域名的网络图,尝试在Web组件上添加下面的属性

.fileAccess(true)
  .onlineImageAccess(true)
  .domStorageAccess(true)
  .imageAccess(true)
  .javaScriptAccess(true)
  .mixedMode(MixedMode.All)
分享
微博
QQ
微信
回复
2025-01-09 20:12:59
相关问题
HarmonyOS h5上传图片功能,超时
373浏览 • 1回复 待解决
HarmonyOS H5调用APP图库选择图片
364浏览 • 1回复 待解决
HarmonyOS h5拉起系统扫码页面的demo
697浏览 • 1回复 待解决
HarmonyOS h5如何实现保存图片到相册
499浏览 • 1回复 待解决
HarmonyOS h5客服无法上传相册的图片
298浏览 • 1回复 待解决
HarmonyOS h5 web上传图片,文件的demo
426浏览 • 1回复 待解决
HarmonyOS 本地H5加载
487浏览 • 1回复 待解决
HarmonyOS web组件加载h5h5拉起摄像头
1077浏览 • 1回复 待解决
HarmonyOS H5页面保存图片到本地相册
398浏览 • 1回复 待解决
HarmonyOS h5页面如何接入智能图片picker
349浏览 • 1回复 待解决
HarmonyOS H5桥接
412浏览 • 1回复 待解决
HarmonyOS webview h5的localstorage
687浏览 • 1回复 待解决
HarmonyOS H5和原生交互
500浏览 • 1回复 待解决