使用u-view上传图片

先看效果

 

html模块

// 单张图片
<u-upload ref="uUpload" :file-list="fileList" :action="action" accept="image" :max-size="2 * 1024 * 1024" @oversize="oversize" :sizeType="sizeType"
							:show-progress="false" :auto-upload="false" max-count="1" width="150" height="150" @on-choose-complete="afterRead">
							</u-upload>

// 多张图片
					<u-upload ref="uUploadMultiple" :file-list="multipleImgs" :action="action" accept="image" :max-size="2 * 1024 * 1024" 
					@oversize="oversize" :sizeType="sizeType" @on-remove="deleteImgs"
					:show-progress="false" :auto-upload="false" max-count="9" width="150" height="150" @on-choose-complete="afterReadImgs">
					</u-upload>

vue 代码段

// 参数
fileList: [], // 图片文件
multipleImgs: [], // 多张图片
action: '你的地址',
sizeType: ['compressed'],

// 方法段
// 文件超出大小限制
			oversize() {
				uni.showToast({
					title: "图片最大不能超过2M",
					icon: 'none'
				})
			},
// 读取文件 -- 单个
			afterRead() {
				this.multipleUpload(this.$refs.uUpload.lists, 0)
			},
			// 读取文件 多张图片上传
			afterReadImgs(event) {
				this.multipleUpload(this.$refs.uUploadMultiple.lists, 2)
			},
			// 多张图片上传
			multipleUpload(event, type) {
				let that = this;
				let num = 9;
				event.map(item => {
					if (num === event.length) {
						uni.showToast({
							title: '最多上传9张图片',
							icon: 'none'
						})
						return
					}
					num += 1
					if(item.file){
						that.uploadDo(item, type)
					}
				})
			},
			// 执行上传
			uploadDo(event, type) {
				let that = this;
				uni.uploadFile({
					url: "请求地址",
					filePath: event.file.path,
					name: 'uploadFile',
					formData: {
						user: 'test'
					},
					success(res) {
						let resp = JSON.parse(res.data)
						if (resp && resp.state === 200) {
							let obj = {};
							obj.url = that.requestUrl.api.fileUrl + resp.data.path
							obj.name = '图' + that.avatar.length + 1
						    that.fileList= []
							that.fileList.push(obj)
							that.$refs.uUpload.clear()
						}
					}
				});
			},
// 删除店内图片
			deleteImgs(index, lists, name) {
				this.deleteDo(index)
			},
			// 执行删除
			deleteDo(event) {
				let that = this
				let delList = this.multipleImgs.splice(event, 1) 
				let paths = delList.map(_ => _.url)
				let params = {
					pathList: paths
				}
				that.$ajax.post("删除图片接口", params).then(res => {
					if (res.statusCode === 200 && res.data.state === 200) {
						console.log("删除图片")
					} else {
						uni.showToast({
							title: res.data.message,
							icon: 'none'
						})
					}
				})
			},

### 使用 `u-upload` 实现文件上传 #### HTML 部分 HTML 结构用于定义页面布局以及触发上传操作的按钮。 ```html <template> <view class="container"> <!-- 图片上传组件 --> <u-upload :action="uploadUrl" :file-list="fileList" @on-success="handleSuccess" @on-error="handleError" @on-remove="handleRemove" multiple name="file" max-count="9" ></u-upload> <!-- 提交按钮 --> <button type="primary" @click="submit">提交</button> </view> </template> ``` 此部分展示了如何配置 `u-upload` 组件并将其集成到 UniApp 页面中[^1]。 #### JavaScript 部分 JavaScript 负责处理与服务器交互逻辑,包括设置上传地址、监听事件等。 ```javascript <script> export default { data() { return { uploadUrl: 'https://example.com/upload', // 替换成实际接口地址 fileList: [] // 存储已选中的文件列表 } }, methods: { handleSuccess(response, index, list) { console.log('Upload success:', response); this.$toast(`第${index + 1}张图片上传完成`); }, handleError(error, index, list) { console.error('Upload error:', error); this.$toast(`第${index + 1}张图片上传失败`); }, handleRemove(index, list) { console.log('Removed file at index:', index); }, submit() { const allUploaded = this.fileList.every(item => item.status === 'success'); if (!allUploaded) { this.$toast('还有未上传成功的图片!'); return; } // 处理表单提交或其他业务逻辑... this.$toast('所有图片均已成功上传'); } } } </script> ``` 上述代码实现了基本的功能需求,比如响应上传成功/错误通知,并提供了简单的验证机制以确保只有当所有图片都成功上传后才能继续下一步操作[^4]。 #### CSS 样式调整 (可选) 如果需要自定义样式,则可以在 `<style>` 标签内添加相应规则: ```css <style scoped> .container { padding: 20px; } /* 可根据实际情况修改 */ .u-upload__input-wrap { margin-bottom: 10px; } </style> ``` 通过这种方式能够更好地控制界面外观,使其更贴合应用的整体风格设计。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值