uni-app schema2code生成vue3页面uni-file-picker有问题,还是我的代码有问题,麻烦帮看看
uni-app schema2code生成vue3页面uni-file-picker有问题,还是我的代码有问题,麻烦帮看看
图片上传问题
用以下代码通过schema2code生成add.vue
,上传不管是jpg,还是png图片,都显示图片类型无效。是我的schema代码哪里出错了么研究了很久文档也没研究出所以然。
Schema 代码
{
"bsonType": "object",
"required": ["tupian"],
"properties": {
"tupian": {
"bsonType": "string",
"title": "图片",
"description": "仅支持上传一张图片,大小不超过500KB",
"componentForEdit": {
"name": "uni-file-picker",
"props": {
"fileType": "image",
"extname": ".jpg,.jpeg,.png,.gif",
"limit": 1,
"maxSize": 512000, // 500KB = 500 * 1024 字节
"autoUpload": true,
"returnFilePath": true
},
"events": {
"success": "handleFileSuccess",
"fail": "handleFileFail"
}
},
"componentForShow": {
"name": "image",
"props": {
"class": "admin-list-image",
"mode": "aspectFill",
":src": "item.tupian"
}
}
}
}
}
add.vue
代码
模板部分
<template>
<view class="uni-container">
<uni-forms ref="form" :model="formData" validateTrigger="bind">
<uni-forms-item name="tupian" label="图片" required>
<uni-file-picker
fileType="image"
extname=".jpg,.jpeg,.png,.gif"
limit="1"
maxSize="500 * 1024"
autoUpload="true"
returnFilePath="true"
placeholder="仅支持上传一张图片,大小不超过500KB"
v-model="formData.tupian"
/>
</uni-forms-item>
<view class="uni-button-group">
<button type="primary" class="uni-button" style="width: 100px;" @click="submit">提交</button>
<navigator open-type="navigateBack" style="margin-left: 15px;">
<button class="uni-button" style="width: 100px;">返回</button>
</navigator>
</view>
</uni-forms>
</view>
</template>
脚本部分
<script>
import { validator } from '../../js_sdk/validator/atupian.js';
const db = uniCloud.database();
const dbCmd = db.command;
const dbCollectionName = 'atupian';
function getValidator(fields) {
let result = {};
for (let key in validator) {
if (fields.includes(key)) {
result[key] = validator[key];
}
}
return result;
}
export default {
data() {
let formData = {
"tupian": ""
};
return {
formData,
formOptions: {},
rules: {
...getValidator(Object.keys(formData))
}
};
},
onReady() {
this.$refs.form.setRules(this.rules);
},
methods: {
submit() {
uni.showLoading({
mask: true
});
this.$refs.form.validate().then((res) => {
return this.submitForm(res);
}).catch(() => {
}).finally(() => {
uni.hideLoading();
});
},
submitForm(value) {
return db.collection(dbCollectionName).add(value).then((res) => {
uni.showToast({
title: '新增成功'
});
this.getOpenerEventChannel().emit('refreshData');
setTimeout(() => uni.navigateBack(), 500);
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
});
});
}
}
};
</script>
开发环境与版本信息
项目创建方式 | 版本号 |
---|---|
使用 schema2code 生成 | 未指定版本号 |
参考文档 https://uniapp.dcloud.net.cn/component/uniui/uni-file-picker.html#介绍
重命名 mediatype 为 file-mediatype, extname 为 file-extname
“bsonType”: “file” 仅限单个文件,如果是多个文件需要调整为 “bsonType”: “array”, “arrayType”: “file”
针对你提到的 uni-app schema2code
生成 vue3
页面中的 uni-file-picker
组件可能存在的问题,我将提供一个基础的 uni-file-picker
使用示例,并附上相关代码,帮助你排查问题。如果问题依旧存在,那么可能是 schema2code
工具本身的问题。
首先,确保你的 uni-app
项目已经正确安装并配置了 uni-file-picker
组件。如果未安装,可以通过以下命令安装:
npm install @dcloudio/uni-ui
然后,在项目的 pages.json
中引入 uni-ui
组件库(如果尚未引入):
"easycom": {
"autoscan": true,
"custom": {
"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
}
}
接下来,是一个使用 uni-file-picker
的简单示例代码。创建一个新的 Vue 3 页面,例如 pages/filePicker/filePicker.vue
:
<template>
<view class="content">
<uni-file-picker
:count="5"
:mode="['image', 'video']"
:limit="20 * 1024 * 1024"
@change="handleFileChange"
>
<button type="primary">选择文件</button>
</uni-file-picker>
<view v-for="(file, index) in files" :key="index" class="file-item">
<image :src="file.url" mode="aspectFill" style="width: 100px; height: 100px;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
files: []
};
},
methods: {
handleFileChange(e) {
this.files = e.detail.files;
}
}
};
</script>
<style scoped>
.content {
padding: 20px;
}
.file-item {
display: flex;
margin-top: 10px;
justify-content: center;
}
</style>
这个示例展示了如何使用 uni-file-picker
组件来选择图片或视频文件,并在页面上显示所选文件的缩略图。
请检查以下几点:
- 确保
uni-file-picker
组件的属性和事件绑定正确。 - 确保
handleFileChange
方法能够正确接收到文件列表。 - 检查控制台是否有错误信息,特别是关于
uni-file-picker
的。
如果以上代码在你的项目中运行正常,但 schema2code
生成的代码有问题,那么可能是 schema2code
工具在生成代码时存在某些特定的配置或兼容性问题。你可以尝试调整 schema2code
的配置或更新到最新版本。如果问题依旧,建议向 uni-app
社区或官方反馈此问题。