element上传图片 可预览

45 篇文章 2 订阅

第一次看到element ui中的上传图片时,可能因为好看的ui惊喜了一下下
但是问题出现了,这些上传大多都是自动上传,而且是一个文件一个文件上传,所以为了解决一下问题

  1. 一次上传多张
  2. 手动上传图片
  3. 图片预览问题

在这里插入图片描述

  • :limit="limit" 限制上传图片的数量
  • list-type="picture-card" 设置上传样式
  • :on-preview="handlePictureCardPreview" 利用该事件来获得图片信息,完成图片预览
  • :on-change="OnChange" 在选择好文件的时候对文件进行校验,并将文件push到dataForm.imgFileList中(因为el-upload 中:file-list="dataForm.imgFileList"并没有实现双向绑定,所以需要手动进行)
  • :on-remove="handleRemove" 因为el-upload 中:file-list="dataForm.imgFileList"并没有实现双向绑定,所以需要手动进行删除
  • submitUpload 手动点击上传图片到服务器

需要注意的是我们要let formData = new FormData();
将文件信息添加进去,然后进行上传请求。
需要在请求的头部加入

headers: {
          "Content-Type": "multipart/form-data",
        },

具体代码

<el-form size="mini" :model="dataForm" ref="dataForm" label-width="80px">
        <el-form-item :class="{ hide: hideUpload }">
          <el-upload
            ref="upload"
            action="#"
            multiple
            :limit="limit"
            :file-list="dataForm.imgFileList"
            list-type="picture-card"
            :on-preview="handlePictureCardPreview"
            :on-change="OnChange"
            :on-remove="handleRemove"
            :on-exceed="handleExceed"
            accept="image/jpeg,image/png"
            :auto-upload="false"
          >
            <i class="el-icon-plus"></i>
            <div class="el-upload__tip" slot="tip">
              只能上传jpg/png文件,最多上传5张且单张图片不超过5M
            </div>
          </el-upload>
          <el-dialog :visible.sync="dialogVisible" append-to-body>
            <img width="100%" :src="dialogImageUrl" alt="" />
          </el-dialog>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitUpload()">确定</el-button>
        </el-form-item>
      </el-form>
<script>
import projectApi from "@/api/project/project";
export default {
  data() {
    return {
      dataForm: {
        imgFileList: [],
      },

      //图片上传的参数
      visible: false,
      uploadUrl: "",
      dialogImageUrl: "",
      dialogVisible: false,
      limit: 5,
      hideUpload: false, //是否显示上传图片的加号
      deleteImgFileList: [], //存已被删除了的图片的id
    };
  },
  mounted() {},
  methods: {
    //点击上传图片
    submitUpload() {
      let formData = new FormData(); //  用FormData存放上传文件
      this.dataForm.imgFileList.forEach((file) => {
        console.log(file.raw);
        console.log(file.size);
        formData.append("file", file.raw);
      });
		// 以下代码可以根据实际情况自己来实现
      this.$http({
        url: this.uploadUrl,
        method: "post",
        data: formData,
        headers: {
          "Content-Type": "multipart/form-data",
        },
      }).then(({ data }) => {
        if (data && data.code === 0) {
          // for (var i = 0; i < data.imgNameList.length; i++) {
          //   this.imgNameList.push(data.imgNameList[i].name);
          //   this.imgSize.push(data.imgNameList[i].size);
          // }
          // this.dataFormSubmit();
          // 上传其他表格信息
          this.$refs.upload.clearFiles();
        } else {
          this.$message.error(data.msg);
        }
      });
    },
    //预览图片时
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    OnChange(file, fileList) {
      // const isType = file.type === "image/jpeg" || "image/png";
      const isLt100M = file.size / 1024 / 1024 < 1024;

      // if (!isType) {
      //   this.$message.error("上传头像图片只能是 JPG 格式!");
      //   fileList.pop();
      // }
      if (!isLt100M) {
        this.$message.error("请检查,上传文件大小不能超过1G!");
        fileList.pop();
      }
      this.dataForm.imgFileList.push(file);
      this.hideUpload = fileList.length >= this.limit;
    },
    //删除图片时
    handleRemove(file, fileList) {
      if (file.id) {
        console.log("删除了已被上传过的图片");
        console.log(file.id);
        this.deleteImgFileList.push(file.id);
      }
      this.dataForm.imgFileList = fileList;
      this.hideUpload = fileList.length >= this.limit;
    },
    //文件超出个数限制时
    handleExceed(files, fileList) {
      this.$message.warning(
        `当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
          files.length + fileList.length
        } 个文件`
      );
    },
  },
};
</script>

当文件的个数超出限制时将“+”隐藏

<style scoped>
.hide >>> .el-upload--picture-card {
  display: none;
}
</style>
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vue中使用Element UI上传图片预览可以按照以下步骤进行: 1. 首先,在项目中安装Element UI和axios: ``` npm install element-ui axios --save ``` 2. 在main.js中引入Element UI和axios,并使用: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import axios from 'axios' Vue.use(ElementUI) Vue.prototype.$axios = axios ``` 3. 在组件中使用`<el-upload>`组件进行文件上传,并使用`<el-image>`组件进行预览: ```html <template> <div> <el-upload action="/api/upload" :on-success="handleSuccess" :on-preview="handlePreview" list-type="picture-card"> <i class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <el-image :src="imageUrl" :preview-src-list="previewImages"></el-image> </el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false, imageUrl: '', previewImages: [] }; }, methods: { handleSuccess(response) { if (response.status === 200) { this.imageUrl = response.data.url; this.previewImages.push(response.data.url); } }, handlePreview(file) { this.dialogVisible = true; this.imageUrl = file.url; this.previewImages = [file.url]; } } } </script> ``` 4. 在服务器端设置相应的文件上传接口,例如使用Node.js和express: ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/api/upload', upload.single('file'), (req, res) => { // 处理上传文件并返回文件URL const file = req.file; const url = `http://example.com/${file.filename}`; res.send({ url }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 上述代码实现了一个简单的上传图片预览的功能,具体可根据实际需求进行调整和扩展。 ### 回答2: 在Vue中使用Element UI上传图片预览可以按照以下步骤进行: 1. 首先,在项目中引入Element UI组件库,并在需要使用的组件中进行注册。 ```js import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 2. 创建一个上传组件,并初始化需要的数据,如图片列表和上传接口等。 ```vue <template> <div> <el-upload action="/your-upload-url" :on-success="handleSuccess" :file-list="fileList" :on-remove="handleRemove" multiple > <el-button size="small" type="primary"> 选择图片 </el-button> </el-upload> <el-image v-for="(file, index) in fileList" :key="index" :src="file.url" :preview-src-list="previewList" fit="cover" style="width: 100px; height: 100px;" ></el-image> </div> </template> <script> export default { data() { return { fileList: [], // 上传的文件列表 previewList: [] // 预览图片列表 } }, methods: { handleSuccess(response, file, fileList) { // 上传成功的回调函数 fileList[fileList.length - 1].url = URL.createObjectURL(file.raw) this.previewList = fileList.map(file => file.url) }, handleRemove(file, fileList) { // 上传文件移除的回调函数 this.previewList = fileList.map(file => file.url) } } } </script> ``` 在上述代码中,el-upload组件负责上传图片,action属性指定上传图片的接口地址,on-success属性可以监听上传成功的事件,并通过handleSuccess方法返回上传成功后的处理方式。file-list属性用于展示上传成功的文件列表,并且绑定了on-remove属性来处理上传文件的移除事件。 el-image组件用于展示预览图片,v-for指令遍历渲染fileList数组中的每张图片,通过src属性绑定图片的地址,在handleSuccess方法中将上传成功的文件通过URL.createObjectURL方法生成临时的URL作为图片的地址。同时,preview-src-list属性绑定了previewList数组,用于展示预览图片的列表。 这样,当用户选择图片并上传成功后,页面将会展示上传的图片,并提供预览功能。 ### 回答3: 使用Element UI库实现图片上传并预览的步骤如下: 1. 首先,在项目中引入Element UI和Vue插件。 ``` import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); ``` 2. 在Vue组件中,添加一个上传组件和一个用于预览图片的容器。 ``` <template> <div> <!-- 图片上传组件 --> <el-upload class="upload-demo" action="/your-upload-api" <!-- 上传图片的接口地址 --> :on-success="handleUploadSuccess" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> <!-- 图片预览容器 --> <div class="preview-container"> <img :src="imageUrl" v-if="imageUrl" alt="预览图片" /> </div> </div> </template> <script> export default { data() { return { imageUrl: '' // 预览图片的URL }; }, methods: { handleUploadSuccess(response) { // 上传成功后,将返回的图片URL赋值给imageUrl this.imageUrl = response.data.imageUrl; } } }; </script> ``` 3. 完成上述代码后,当用户选择图片并上传成功时,上传接口会返回图片的URL。通过`handleUploadSuccess`方法将返回的URL赋值给`imageUrl`,然后在预览容器中显示预览图片即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值