Element文件上传-解决跨域

以照片墙为例
在这里插入图片描述
官方源码

<el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  list-type="picture-card"
  :on-preview="handlePictureCardPreview"
  :on-remove="handleRemove">
  <i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
  <img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<script>
  export default {
    data() {
      return {
        dialogImageUrl: '',
        dialogVisible: false
      };
    },
    methods: {
      handleRemove(file, fileList) {
        console.log(file, fileList);
      },
      handlePictureCardPreview(file) {
        this.dialogImageUrl = file.url;
        this.dialogVisible = true;
      }
    }
  }
</script>

默认提交到action指定的url,如果是跨域的情况下。该方式是不支持的!

需要使用 :http-request 的方式上传

	<el-upload
			action=""
			:http-request="upload"
			list-type="picture-card"
			:on-preview="handlePictureCardPreview"
			:on-remove="handleRemove">
		<i class="el-icon-plus"></i>
	</el-upload>
	<el-dialog :visible.sync="dialogVisible">
		<img width="100%" :src="dialogImageUrl" alt="">
	</el-dialog>

:http-request 指定自定义的方法,上传文件

注意:action=“” 必须存在,给个空字符串即可。不能没有

		upload(param) {
			const formData = new FormData()
			formData.append('file', param.file)
			axios.post(url, formData).then(response => {
				//根据返回值进行判断是否上传成功
				if(response.data.flag){
					//上传成功
					console.log('上传图片成功')
				}else{
					//上传失败
					console.log('图片上传失败')
				}
			}).catch(response => {
				console.log('异常处理')
			})
		}

如果要限制上传文件的文件数,需要使用 :limit=“限制数”
这儿:limit=“6” 设置了最大上传文件的数量为6

	<el-upload
			action=""
			:http-request="upload"
			:limit="6"
			list-type="picture-card"
			:on-preview="handlePictureCardPreview"
			:on-remove="handleRemove">
		<i class="el-icon-plus"></i>
	</el-upload>
	<el-dialog :visible.sync="dialogVisible">
		<img width="100%" :src="dialogImageUrl" alt="">
	</el-dialog>

有时我们需要对上传的文件进行格式限制,使用 :before-upload
:before-upload=“beforeAvatarUpload” 在文件上传之前进行文件大小,格式等判断,是否允许上传

	<el-upload
			action=""
			:http-request="upload"
			:limit="6"
			list-type="picture-card"
			:before-upload="beforeAvatarUpload"
			:on-preview="handlePictureCardPreview"
			:on-remove="handleRemove">
		<i class="el-icon-plus"></i>
	</el-upload>
	<el-dialog :visible.sync="dialogVisible">
		<img width="100%" :src="dialogImageUrl" alt="">
	</el-dialog>

这儿规定了只能上传对应格式的图片,和文件的大小
返回true允许上传,false阻止上传

			beforeAvatarUpload(file) {
				const isJPG =
						file.type === "image/gif" ||
						file.type === "image/jpg" ||
						file.type === "image/jpeg" ||
						file.type === "image/png";
				const isLt2M = file.size / 1024 < 1;
				if (!isJPG) {
					this.$message.error("仅支持gif,jpg,png格式的图片!");
				}
				if (!isLt2M) {
					this.$message.error("上传图片大小不能超过 1MB!");
				}
				return isJPG && isLt2M;
			}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑洁文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值