HarmonyOS 在H5内使用沙箱路径显示图片失败

APP为H5+原生混合开发,图片上传成功后,在H5内使用沙箱路径显示图片失败,请问有什么解决方法吗?

<img src="/data/storage/el2/base/haps/entry/cache/IMG_20240703_151611.jpg">
  • 1.
HarmonyOS
2024-12-25 15:33:25
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

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(`resultBase64Str = ${mystr}`)
        })
    }
  }
}
//H5参考代码:
<!DOCTYPE html>
  <html>
  <head>
  </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>
  </body>
  </html>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.

访问带域名的网络图片,需要声明网络权限ohos.permission.INTERNET,参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/declare-permissions-V5

分享
微博
QQ
微信
回复
2024-12-25 17:20:39


相关问题
HarmonyOS H5展示沙箱路径里面的图片
907浏览 • 1回复 待解决
webview加载Vue h5失败
18759浏览 • 5回复 待解决
HarmonyOS 如何修改H5的localstorage
611浏览 • 1回复 待解决
HarmonyOS webview加载H5显示过慢
895浏览 • 1回复 待解决
H5中的图片在Web组件中显示异常
977浏览 • 1回复 待解决
HarmonyOS h5上传图片功能,超时
822浏览 • 1回复 待解决
HarmonyOS H5调用APP图库选择图片
836浏览 • 1回复 待解决
HarmonyOS h5 web上传图片,文件的demo
819浏览 • 1回复 待解决
HarmonyOS h5如何实现保存图片到相册
1051浏览 • 1回复 待解决
HarmonyOS h5客服无法上传相册的图片
766浏览 • 1回复 待解决
如何使用Image加载沙箱路径图片资源
2485浏览 • 2回复 待解决
HarmonyOS web组件加载h5h5拉起摄像头
1585浏览 • 1回复 待解决
HarmonyOS 本地H5加载
1029浏览 • 1回复 待解决
HarmonyOS 预览沙箱路径下的文件失败
657浏览 • 1回复 待解决
HarmonyOS h5页面如何接入智能图片picker
693浏览 • 1回复 待解决
HarmonyOS H5页面保存图片到本地相册
856浏览 • 1回复 待解决
HarmonyOS H5桥接
932浏览 • 1回复 待解决
HarmonyOS H5和原生交互
956浏览 • 1回复 待解决