HarmonyOS鸿蒙Next中H5上传文件,跳转到文件管理后点击图库无响应

HarmonyOS鸿蒙Next中H5上传文件,跳转到文件管理后点击图库无响应 任意支持上传文件的H5页面,点击上传按钮,跳转到文件管理,点击图库,无响应,有解决方案吗?

2 回复

以下是简单demo,以html中input类型按钮为例,分别对应相册、文件管理、拍照,分段将注释删除就可以分别跑通:

1、index.ets:

import web_webview from '@ohos.web.webview'
import { common } from '@kit.AbilityKit'
import { uri, util } from '@kit.ArkTS'
import fs from '@ohos.file.fs';
import picker from '@ohos.file.picker'
import { BusinessError } from '@kit.BasicServicesKit';

class testClass {
  base64Str: string

  constructor(base64Str:string) {
    this.base64Str=base64Str;
  }

  test(): string {
    return "2123";
  }

  toString(): void {
    console.log('Web Component toString');
  }
}

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  @State uris: Array<string> = []
  @State base64Str : string = ""
  @State testObj: testClass = new testClass(this.base64Str);
  aboutToAppear() {
    web_webview.WebviewController.setWebDebuggingAccess(true);
  }
  build() {
    Column() {

      Web({ src: $rawfile('TestonShowFileSelector.html'), controller: this.controller })
        .javaScriptAccess(true)
        .domStorageAccess(true)
        .onShowFileSelector((event) => {
          console.log('MyFileUploader onShowFileSelector invoked')
          const photoSelectOptions = new picker.PhotoSelectOptions();
          photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
          photoSelectOptions.maxSelectNumber = 8;
          const photoViewPicker = new picker.PhotoViewPicker();
          photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
            this.uris = photoSelectResult.photoUris;
            let file1 = fs.openSync(this.uris[0])
            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 = base64.encodeToStringSync(unit);
            this.base64Str = "myFunction( \"" + mystr + "\")"
            this.controller.runJavaScript(this.base64Str)
            console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
          }).catch((err: BusinessError) => {
            console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
          })

          return false
        })

    }
  }
}

2、TestonShowFileSelector.html

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
<script>
function myFunction(mystr)
{
  var img = new Image();
  img.width = 100;
  img.height = 50;
  img.src = "data:image/png;base64,"+mystr;
  document.body.appendChild(img);
  console.log(mystr)
  console.log("这部分是将arkts发送过来的str渲染到h5页面上,或者存在h5侧的变量中")
}
window.onload = function() {
  var fileInput = document.getElementById('upload');

  fileInput.addEventListener('change', function(e) {
    var file = e.target.files[0];
    var reader = new FileReader();

    reader.onloadend = function() {
      var img = document.getElementById('preview');
      img.src = reader.result;
    }

    if (file) {
      reader.readAsDataURL(file);
    }
  });
}
</script>
</head>
<body>
<form id="upload-form" enctype="multipart/form-data">
  <!-- 修改type属性为camera -->
  <input type="file" id="upload" name="upload" accept="image/*" capture="camera" />
  <!-- 添加一个图片元素用于展示图片 -->
  <img id="preview"/>
</form>
<div id="155134"></div>
</body>
</html>

更多关于HarmonyOS鸿蒙Next中H5上传文件,跳转到文件管理后点击图库无响应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,H5上传文件时跳转到文件管理后点击图库无响应,可能是由于权限配置或路径解析问题。首先,确保应用已获取必要的文件读写权限。其次,检查H5页面中文件选择器的实现,确保其与鸿蒙系统的文件管理接口兼容。最后,查看系统日志,定位具体错误信息,进行针对性修复。

回到顶部