HarmonyOS 鸿蒙Next Web 图片上传功能失效
HarmonyOS 鸿蒙Next Web 图片上传功能失效
使用Web的.onShowFileSelector,接收H5页面的照片上传,原来是可行的,现在的NEXT版本失效了。
原生代码:
const context = getContext(this) as common.UIAbilityContext
let want: Want = {
action: wantConstant.Action.ACTION_VIDEO_CAPTURE,
parameters: {
"callBundleName": context.abilityInfo.bundleName,
}
}
context.startAbilityForResult(want, (error: BusinessError, data: common.AbilityResult) => {
if (error && error.code !== 0) {
//logger.error(`${TAG_CAMERA_ERROR} ${JSON.stringify(error.message)}`);
console.log(TAG, `message ${error.message}`)
return;
}
let uri: string = data.want?.parameters?.resourceUri as string;
console.log(TAG, ' uri ', uri)
if (result) {
result.handleFileList([uri])
}
})
这里也接收到了uri并返回给到h5:
<input ref="album" type="file" id="upload" name="upload" accept="*/*" onchange="showPic()" />
<p id="image_preview">图片预览</p>
<img id="image" width="100%" />
function showPic() {
let event = this.event;
let tFile = event ? event.target.files : [];
if (tFile === 0) {
document.getElementById('image_preview').style.display = 'block';
document.getElementById('image_preview').innerHTML = "未选择图片";
return
}
document.getElementById('image').setAttribute('src', URL.createObjectURL(tFile[0]));
document.getElementById('image_preview').style.display = 'block';
document.getElementById('image').style.display = 'block';
}
目前来看,是html input 标签收不到onchange 回调,导致渲染不出来。
Web 控件接收到onShowFileSelector 事件,跳转拍照,回来通过 result.handleFileList([uri]) 返回给H5,但是接下来没有走onInterceptRequest事件。 要是给个完成的Web 上传图片到input标签的案例就好了。
更多关于HarmonyOS 鸿蒙Next Web 图片上传功能失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
原生端:
// WebComponent.ets
import { webview } from '@kit.ArkWeb';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
Web({ src: $rawfile('index.html'), controller: this.controller })
.onShowFileSelector((event) => {
console.log('MyFileUploader onShowFileSelector invoked');
const documentSelectOptions = new picker.PhotoSelectOptions();
let uri: string | null = null;
const documentViewPicker = new picker.PhotoViewPicker();
documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {
console.log('[documentSelectResult]', JSON.stringify(documentSelectResult))
console.log('[documentSelectResult]', JSON.stringify(documentSelectResult.photoUris[0]))
uri = documentSelectResult.photoUris[0];
console.info('documentViewPicker.select to file succeed and uri is:' + uri);
if (event) {
event.result.handleFileList([uri]);
}
}).catch((err: BusinessError) => {
console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
})
return true;
})
}
}
}
H5端:
// index.html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
</head>
<body>
<form id="upload-form" enctype="multipart/form-data">
<input ref="album" type="file" id="upload" name="upload" accept="*/*" onchange="showPic()"/>
<p id="image_preview">图片预览</p>
<img id="image" width="100%"/>
</form>
<script>
function showPic() {
let event = this.event;
let tFile = event ? event.target.files : [];
if (tFile === 0) {
document.getElementById('image_preview').style.display = 'block';
document.getElementById('image_preview').innerHTML = "未选择图片";
return
}
document.getElementById('image').setAttribute('src', URL.createObjectURL(tFile[0]));
document.getElementById('image_preview').style.display = 'block';
document.getElementById('image').style.display = 'block';
}
</script>
</body>
</html>
试下呢
更多关于HarmonyOS 鸿蒙Next Web 图片上传功能失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS 鸿蒙Next Web图片上传功能失效的问题,可能的原因及解决方向如下:
-
权限配置:检查应用是否已正确配置图片上传所需的权限,包括存储访问权限和网络访问权限。在鸿蒙系统中,权限管理较为严格,未授权可能导致功能失效。
-
前端代码检查:验证前端代码中图片上传的逻辑是否正确,包括文件选择、文件读取、文件编码及发送请求等步骤。确保文件对象未被错误处理或丢失。
-
后端接口验证:检查后端接收图片上传的接口是否正常运行,包括接口地址、请求方法、请求头及请求体格式等是否正确。后端异常或配置错误也可能导致上传失败。
-
网络状态:确认设备网络状态良好,上传过程中网络波动或中断可能导致上传失败。
-
系统兼容性:检查鸿蒙系统版本是否与Next Web框架及图片上传功能兼容。系统更新可能引入新的限制或bug,影响功能运行。
-
日志分析:查看应用及系统日志,分析上传过程中出现的错误信息,定位问题根源。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,