Upload 上传:图片上传

需要用到的API

action:服务器上传地址
max-count:最大选择图片的数量
form-data:上传额外携带的参数
name:上传文件的字段名,供后端获取使用

第一种:选择图片后,直接上传

<template>
	<view class="index">
		<u-upload 
		:show-progress="false"
		:action="action" 
		:form-data="formData" 
		max-count="3" 
		name="file"
		@on-uploaded="onUploaded"  
		@on-change="onChange"></u-upload>
	</view>
</template>
<script>
	export default {
		data() {
			return {
				// 演示地址,请勿直接使用
				action: 'https://api.diandianhg.com/api/common/upload',
				formData: {
					access_token:uni.getStorageSync('access_token')
				},
				fileList: []
			}
		},
		methods:{
			// 上传成功
			onUploaded(res) {
				this.fileList = res;
				console.log(this.fileList);
			},
			// 无论成功失败都会触发
			onChange(res){
				let data = JSON.parse(res.data)
				if(data.code == 0){
					console.log(data)
					uni.showToast({
						icon:'none',
						title: data.msg,
					});
				}
			}
		}
	}
</script>

url: 图片地址
error:组件内部使用,不应根据此值判断上传是否成功,而应根据progress属性
progress:如果值为100,表示图片上传成功
response:上传成功后,服务器返回的数据,这是最有用的了
在这里插入图片描述

上传失败的情况提示,

在这里插入图片描述

碰到的BUG:
1、发布文章,需要上传图片(最多三张)
2、发布成功后,可以进行修改,需要把之前上传的的图片显示出来,这里用 fileList 数组存。

官方描述:

可以通过设置file-list参数(数组,元素为对象),显示预置的图片。其中元素的url属性为图片路径
<u-upload 
	:show-progress="false" 
	:action="action" 
	:form-data="formData" max-count="3"
	name="file" 
	:file-list="fileList" 
	@on-uploaded="onUploaded" 
	@on-remove="onRemove">
</u-upload>

<script>
// data中定义的两个数组:
fileList:[], // 显示默认的图片,以及修改后的图片集合
imgArr:[], // 未修改的图片集合
// 把之前上传过的图片,分别存入fileList和imgArr。
item.attaches.forEach((item, index) => {
	this.fileList.push({
		path:item.path
	})
	this.imgArr.push({
		url:this.$imgUrl+item.path,
		path:item.path
	})
})
onUploaded(res) {
	this.fileList = res;
},
// 删除
onRemove(e) {
	this.imgArr.splice(e, 1)
},

let str = [];
let medias = [];
// 编辑内容
if(this.edit == 1){
	// 如果item.response && item.response.code == 1,说明已经进行了修改,把修改后的 重新上传的图片url 存入str。
	this.fileList.forEach(item=>{
		if(item.response && item.response.code == 1){
			str.push(item.response.data.url)
		}
	})
	
	// 如果未修改的图片没有删除完,就把未删除的图片也存入 str 。
	if(this.imgArr.length>0){
		this.imgArr.forEach(item=>{
			if(item.path){
				str.push(item.path)
			}
		})
	}
}
</script>

这里说下为什么不能直接要用两个数组存。
这是默认一进来,自己组合数据后的fileList
在这里插入图片描述
如果你修改了其中一张图片,数据格式会出现错误。
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为AI语言模型,我无法上传图片。但是,我可以为您提供一些关于el-upload上传图片的帮助。 el-upload是Element UI提供的一个上传组件,可以用来上传图片、文件等。以下是一些基本用法: 1.安装el-upload组件: ``` npm install element-ui --save ``` 2.引入el-upload组件: ``` import { Upload } from 'element-ui'; ``` 3.使用el-upload组件: ```html <template> <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" :limit="3" :on-exceed="handleExceed" :file-list="fileList"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> export default { data() { return { fileList: [] }; }, methods: { handlePreview(file) { console.log('预览文件', file); }, handleRemove(file, fileList) { console.log('移除文件', file, fileList); }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500K = file.size / 1024 < 500; if (!isJPG) { this.$message.error('上传图片只能是 JPG/PNG 格式!'); return false; } if (!isLt500K) { this.$message.error('上传图片大小不能超过 500KB!'); return false; } return true; }, handleSuccess(response, file, fileList) { console.log('上传成功', response, file, fileList); }, handleError(error, file, fileList) { console.log('上传失败', error, file, fileList); }, handleExceed(files, fileList) { this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); } } }; </script> ``` 这段代码中,我们创建了一个简单的上传组件,可以上传图片,同时设置了一些限制,如只能上传jpg/png文件,且不超过500kb,最多上传3个文件等。 希望这能帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值