2***@qq.com
2***@qq.com
  • 发布:2024-09-30 17:10
  • 更新:2024-09-30 17:53
  • 阅读:144

【报Bug】harmony next uni.canvasToTempFilePath返回{"errMsg":"canvasToTempFilePath:ok"}

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 14.5

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS NEXT Developer Beta1

手机厂商: 华为

手机机型: mate60 pro

页面类型: vue

vue版本: vue3

打包方式: 离线

项目创建方式: CLI

CLI版本号: 5.0

示例代码:

<template>
<u-nav-bar title="编辑头像" transparent />
<u-page-view classes="content" block>
<image class="avatar" :src="userInfo?.avatar || state.logo" mode="aspectFill" />
<u-text class="edit-tips" block size="small">
您可自定义设置头像,如果图片包含不适当的内容,它将无法更换成功或被默认图片替换
<u-text size="small" color="#55d091" @click="onMore">了解更多</u-text>
</u-text>
<button class="travel-btn-primary" @click="onChange">更换头像</button>
</u-page-view>
<l-clipper v-if="state.clipper" @success="onSuccess" :image-url="state.filePath" />
</template>

<script setup lang="ts">
import { useRouteGuards } from '@/core/hooks'
import { prefixs } from '@/core/apis/configs'
import { updateAuditAvatar } from '@/core/service'

const obs = ref(prefixs.obs)
const state = reactive<{
logo: string
filePath: string
clipper: boolean
}>({
logo: ${obs}/mine/default-avatar.png,
filePath: '',
clipper: false,
})
const { userStore } = useRouteGuards()
const { userInfo } = userStore

const onChange = () => {
uni.chooseImage({
count: 1,
success(res) {
state.filePath = res?.tempFilePaths?.[0]
if (state.filePath) {
state.clipper = true
}
},
})
}

const onSuccess = async (event: { url: string; height: number; width: number }) => {
userInfo.avatar = event.url
const next = await updateAuditAvatar(userInfo.avatar)
if (next) {
userStore.setUserinfo(userInfo)
}
state.clipper = false
}

const onMore = () => {
uni.navigateTo({ url: '/pages/mine/settings/about/index' })
}
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

//scss

deep(.content) { .avatar {
width: 750rpx;
height: 750rpx;
margin: 12rpx 0 72rpx;
}

.edit-tips {
background: url(https://onetravel-web.onetravelgz.com/onecode-travel/miniprogram/mine/tips-icon.png) no-repeat left top;
background-size: 32rpx 32rpx;
margin-bottom: 48rpx;
padding-left: 48rpx;
font-size: 24rpx;
color: #000000;
font-weight: 400;
display: block;
}

.travel-btn-primary,
.edit-tips {
margin-left: 56rpx;
margin-right: 56rpx;
}
}

操作步骤:

直接使用

预期结果:

应该返回图片路径

实际结果:

{"errMsg":"canvasToTempFilePath:ok"}

bug描述:

  1. uni.canvasToTempFilePath在harmony next下返回值为{"errMsg":"canvasToTempFilePath:ok"}

  2. 此外CanvasContext.draw函数的callback在harmony next下不触发,因此代码中进行了延迟600毫秒的处理

使用了图片裁剪插件,其中包含canvasToTempFilePath函数,针对harmony next进行了部分代码修改,下面是插件链接:
https://ext.dcloud.net.cn/plugin?id=3594#:~:text=%E4%B8%80%E6%AC%BE%E8%87%AA%E6%88%91%E6%84%9F%E8%A7%89%E8%89%AF%E5%A5%BD%E7%9A%84%E5%9B%BE

下面提供代码样本附件,对harmony进行了兼容处理:

2024-09-30 17:10 负责人:无 分享
已邀请:
DCloud_UNI_LXH

DCloud_UNI_LXH

cli 使用的什么版本?在页面中使用 canvs 组件,调用 uni.canvasToTempFilePath 能返回路径吗?

  • 2***@qq.com (作者)

    sdk版本3.0.0-4020920240930001,刚刚试了,还是一样的。harmony 模版使用HBuilderX 4.29自动生成的app-harmony@1.3.7

    2024-10-06 16:18

要回复问题请先登录注册