结合 el-upload 实现图片上传,预览.

​​​​​​​

<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }

  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }

  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }

  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>
<div id="root">
  <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false"
    :auto-upload=false :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :on-change="changeFn">
    <img v-if="imageUrl" :src="imageUrl" class="avatar">
    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
</div>
<script src="./vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.2/index.js"></script>
<script>
  const vm = new Vue({
    el: "#root",
    data: {
      imageUrl: '',
    },
    mountend() {

    },
    methods: {
      changeFn(file, fileList) {
        this.imageUrl = URL.createObjectURL(file.raw);
        console.log(file, "文件")
        console.log(fileList, "文件列表")
        this.upFile(file)
      },
      upFile(file) {
        console.log(file.raw,"上传参数")
        var formData = new FormData();
        formData.append('file', file.raw);  //添加图片信息的参数
        formData.append('sizeid', 123);  //添加其他参数
        $.ajax({
          url: '/material/uploadFile',
          type: 'POST',
          cache: false, //上传文件不需要缓存
          data: formData,
          processData: false, // 告诉jQuery不要去处理发送的数据
          contentType: false, // 告诉jQuery不要去设置Content-Type请求头
          success: function (data) {
           
          },
          error: function (data) {
            tipTopShow("上传失败");
          }
        })

      },

取自大佬@lar_lsw

https://blog.csdn.net/qyp_slw/article/details/78787436?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164147556016781685379174%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164147556016781685379174&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-78787436.first_rank_v2_pc_rank_v29&utm_term=ajax%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87&spm=1018.2226.3001.4187

### Element Plus `el-upload` 组件用于视频上传及预览 为了实现视频文件的上传以及预览功能,在前端开发中通常会采用 Vue.js 结合 Element Plus 的方式来构建界面。具体来说,通过配置 `el-upload` 组件的各项属性和监听器,能够满足业务逻辑的需求。 #### 配置项设置 - **action**: 设置服务器端接收上传请求的地址。 - **before-upload**: 定义上传前的操作函数,可用于验证文件类型、大小等条件[^2]。 ```javascript const beforeUploadHandler = (file) => { const isVideo = file.type === 'video/mp4'; // 或者其他支持的视频格式 if (!isVideo) { ElMessage.error('仅允许上传MP4格式!'); } const isLt10M = file.size / 1024 / 1024 < 10; if (!isLt10M) { ElMessage.error('上传视频大小不能超过 10MB!'); } return isVideo && isLt10M; }; ``` - **on-preview**: 当点击已上传文件列表内的文件链接时触发此回调,可用来处理播放视频的动作。 ```html <template> <!-- ... --> <el-button type="primary" @click="handlePreview">预览</el-button> <!-- ... --> </template> <script setup lang="ts"> import { ref } from 'vue'; let videoUrl = ref(''); function handlePreview(file: any){ videoUrl.value = URL.createObjectURL(file.raw); } </script> <!-- 使用HTML5 Video标签显示视频 --> <video v-if="videoUrl !== ''" :src="videoUrl" controls></video> ``` - **auto-upload=false**: 关闭自动上传选项以便手动控制何时发起上传操作。 #### 处理上传过程中的状态变化 利用 `on-progress`, `on-success`, 和 `on-error` 这三个事件处理器分别应对不同阶段的状态更新: - `on-progress`: 显示进度条给用户看当前上传进展程度; - `on-success`: 成功完成上传之后执行相应动作比如刷新页面或清空表单; - `on-error`: 如果发生错误则给出提示信息告知用户出现问题所在。 ```html <el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple :before-upload="beforeUploadHandler" :on-preview="handlePreview" :on-success="handleSuccess" :on-error="handleError" :on-progress="handleProgress" :auto-upload="false" > <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖到此处,或点击上传</div> <template #tip> <div class="el-upload__tip">只能上传mp4文件,且不超过10mb</div> </template> </el-upload> ``` 以上就是基于 Element Plus 中 `el-upload` 组件实现视频上传及其预览的主要思路和技术要点[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值