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

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

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

使用的相关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
相关问题
卡片能否通过预览进行预览
257浏览 • 1回复 待解决
如何通过web组件预览PDF
194浏览 • 1回复 待解决
从本机获取图片进行上传到spring后端
1269浏览 • 1回复 待解决
如何查询系统下载任务并进行管理
516浏览 • 1回复 待解决
怎么实现后台上传图片
1007浏览 • 1回复 待解决
使用web组件实现预览沙箱中pdf
690浏览 • 1回复 待解决
预览器上WEB组件无法显示HTML内容
1053浏览 • 1回复 待解决
如何实现图片的大图预览效果
530浏览 • 1回复 待解决
如何禁止web组件自动加载图片
391浏览 • 1回复 待解决
Redis多久通过slave进行复制?
988浏览 • 1回复 待解决
基于PhotoViewPicker对图片进行操作
191浏览 • 1回复 待解决
基于ImageKit对图片进行处理
196浏览 • 1回复 待解决
如何对图片进行高斯模糊处理
719浏览 • 1回复 待解决
如何对相册图片进行编辑裁剪
759浏览 • 1回复 待解决