通过web上传图片并进行预览

当写了一段上传图片的html或者是一个加载在线网页需要上传图片或者视频时,可以通过web组件的onShowFileSelector回调通过picker拉起图库进行选择文件上传。

HarmonyOS
2024-05-26 17:37:38
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
鸡翅可乐

使用的相关API

onShowFileSelector

photoViewPicker

Image

核心代码解释

import web_webview from '@ohos.web.webview' 
import picker from '@ohos.file.picker' 
import { BusinessError } from '@ohos.base' 
  
@Entry 
@Component 
struct WebComponent { 
  controller: web_webview.WebviewController = new web_webview.WebviewController() 
  //定义一个全局的string类型的数组,用来存放通过picker拉起后选择完图片后图片的uri 
  @State uris: Array<string> = [] 
  aboutToAppear() { 
    web_webview.WebviewController.setWebDebuggingAccess(true); 
  } 
  build() { 
    Column() { 
      Image(this.uris[0]).width(100).height(100) 
      //用来展示选择的图片 
      Image(this.uris[1]).width(100).height(100) 
      //用来展示选择的视频 
      Video({ src: this.uris[0]}).height(100) 
      Web({ src: $rawfile('i.html'), controller: this.controller }) 
        .javaScriptAccess(true) 
        .domStorageAccess(true) 
        .onShowFileSelector((event) => { 
          console.log('MyFileUploader onShowFileSelector invoked') 
          const photoSelectOptions = new picker.PhotoSelectOptions(); 
          // 过滤选择媒体文件类型为IMAGE_VIDEO_TYPE 
          photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE; 
          // 选择媒体文件的最大数目 
          photoSelectOptions.maxSelectNumber = 2;  
          //let uris: Array<string> = []; 
          const photoViewPicker = new picker.PhotoViewPicker(); 
          photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => { 
            this.uris = photoSelectResult.photoUris; 
            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 
        }) 
    } 
  } 
}

html为:

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8"> 
    <script> 
    window.onload = function() { 
      // 获取文件输入元素 
      var fileInput = document.getElementById('upload'); 
  
      // 监听文件输入的改变事件 
      fileInput.addEventListener('change', function(e) { 
        // 获取选中的文件 
        var file = e.target.files[0]; 
        // 创建一个FileReader对象 
        var reader = new FileReader(); 
  
        // 定义文件读取完成后的回调函数 
        reader.onloadend = function() { 
          // 获取图片元素 
          var img = document.getElementById('preview'); 
          // 将读取到的结果赋值给图片元素的src属性 
          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="video/mp4" capture="camera"/> 
    <!-- 添加一个图片元素用于展示图片 --> 
    <img id="preview" /> 
</form> 
</body> 
</html>

实现效果

分享
微博
QQ
微信
回复
2024-05-27 22:21:20
相关问题
卡片能否通过预览进行预览
509浏览 • 1回复 待解决
如何通过web组件预览PDF
555浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
149浏览 • 1回复 待解决
HarmonyOS Web 图片上传功能失效
120浏览 • 1回复 待解决
HarmonyOS使用Web组件预览PDF和图片
555浏览 • 1回复 待解决
从本机获取图片进行上传到spring后端
2290浏览 • 1回复 待解决
HarmonyOS web组件上传文件
151浏览 • 1回复 待解决
如何查询系统下载任务并进行管理
1633浏览 • 1回复 待解决
如何使用预览接口进行文件预览
350浏览 • 1回复 待解决
怎么实现后台上传图片
2283浏览 • 1回复 待解决
HarmonyOS图片上传相关问题
375浏览 • 1回复 待解决
Web组件如何实现文件上传功能?
318浏览 • 1回复 待解决
HarmonyOS Web组件加载pdf预览
119浏览 • 1回复 待解决
HarmonyOS如何实现图片上传
341浏览 • 1回复 待解决
快速预览通过网络数据渲染页面
225浏览 • 1回复 待解决
使用axios上传图片时候错误
48浏览 • 1回复 待解决