elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

这篇具有很好参考价值的文章主要介绍了elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档链接

官方文档 https://element.eleme.cn/#/zh-CN/component/upload

使用el-upload组件上传文件

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示,vue.js,前端,javascript

具体参数说明,如何实现上传、下载、删除等功能

  • action:文件上传地址,我的项目里已经封装好了请求。使用的时候需要依据项目填写。

  • show-file-list: 是否显示已上传文件列表。

  • headers:设置上传的请求头部。我的项目需要传token。

  • on-preview:点击文件列表中已上传的文件时的钩子。
    可以在这个这个回调方法里写下载功能部分代码,实现点击文件下载功能。

  • on-remove:文件列表移除文件时的钩子。
    在文件列表回显时,使用数组fileData记录id列,执行删除回调时,匹配id,因为删除回调方法返回的file中不记录id,只记录url,可通过url相同返回id,再调用删除接口。

  • on-successfunction(response, file, fileList) 文件上传成功时的钩子。
    如果不设置auto-upload:false ,则选取文件后立即进行上传,成功回调后使用返回的参数调用接口,完成文件上传。

获取文件列表进行file-list格式匹配

  • file-list :上传的文件列表, 例如: [{name: ‘food.jpg’, url: ‘https://xxx.cdn.com/xxx.jpg’}]
  • 列表回显时,需要将返回列表对应参数赋值给file-list对应的数组fileData 。

代码

<template>
  <basic-container>
    <el-form :model="dataForm" ref="dataForm" label-width="140px">
      <el-form-item>
        <el-upload class="upload-demo" 
          ref="upload" 
          :headers="headers" 
          action="/admin/sys-file/upload"
          :on-preview="handlePreview" 
          :on-remove="handleRemove" 
          :on-success="handleAvatarSuccess" 
          :file-list="fileData">
          <el-button slot="trigger" size="small" type="primary">上传文件</el-button>
        </el-upload>
      </el-form-item>
    </el-form>
  </basic-container>
</template>

<script>
import {
getObj,
addObj,
putObj,
fetchList,
getnoticeId,
delObj
} from ‘@/api/policy/noticeattachment’
import store from ‘@/store’
import { mapState} from ‘vuex’
export default {
data() {
return {
dataForm: {
id: 0,
noticeId: ‘’,
attachName: ‘’,
attachUrl: ‘’,
},
dataList: [],
fileData: [],
headers: {
‘Authorization’: 'Bearer ' + store.getters.access_token,
},
}
},
methods: {
init(id) {
// console.log(id)
this.dataForm.noticeId = id
//数组每次需要清空
this.fileData.splice(0, this.fileData.length);
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…refs[‘dataForm’].resetFields();
if (this.dataForm.noticeId) {
getnoticeId(this.dataForm.noticeId).then(response => {
this.dataList = response.data.data;
this.dataList.forEach(list => {
this.fileData.push({
name: list.attachName,
url: list.attachUrl,
id: list.id //删除时使用
})
})
});
}
});
},
//移除回调
handleRemove(file, fileList) {
let resultArr = this.fileData.filter((item) => {
return item.url === file.url
});
// console.log(resultArr[0])
this.dataForm.id = resultArr[0].id
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…message.success(‘删除成功’)
})
},
// 表单提交
dataFormSubmit() {
this.KaTeX parse error: Expected 'EOF', got '&' at position 369: …ken operator">=&̲gt;</span> <spa…message.success(‘修改成功’)
});
} else {
addObj(this.dataForm).then(data => {
this.$message.success(‘添加成功’)
})
}
}
})
}
}
}
</script>

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示,vue.js,前端,javascript

文件展示列表自定义为表格展示

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示,vue.js,前端,javascript

使用的具体参数说明

  • show-file-list: 是否显示已上传文件列表。
    展示自定义表格样式需要设置show-file-list=“false”
  • on-successfunction(response, file, fileList) 文件上传成功时的钩子。
    如果不设置auto-upload:false ,则选取文件后立即进行上传,成功回调后使用返回的参数调用接口,完成文件上传。

文件大小展示问题(KB/MB)

  • 上传文件时size默认传file返回的size大小(默认为1字节),在表格展示时进行判断,如果大于1MB展示单位为MB,小于1MB展示单位KB。
  • MB:size / 1024 / 1024
  • KB:size / 1024
    (既然提到字节,可能有的人不熟悉字节,这里顺便记录一下字节转换关系)
    字节也叫Byte,是计算机数据的基本存储单位。
    8bit(位)=1Byte(字节)
    1024Byte(字节)=1KB
    1024KB=1MB
    1024MB=1GB
    1024GB=1TB
    其中:K是千 M是兆 G是吉咖 T是太拉。

文件下载

  • 点击下载按钮,实现下载此文件。使用a标签,传入对应文件name和url。具体代码下面记录。

代码

<template>
  <basic-container>
        <el-upload class="upload-demo"
          ref="upload"
          :headers="headers"
          action="/admin/sys-file/upload"
          :on-success="handleAvatarSuccess"
          :show-file-list="false">
          <el-button slot="trigger" size="small" type="primary">上传文件</el-button>
        </el-upload>
        <el-table class="down" :data="dataList" border stripe style="width: 100%;margin-top: 20px;">
            <el-table-column prop="attachName" label="文件名称"></el-table-column>
            <el-table-column prop="attachSize" label="文件大小">
              <template slot-scope="scope">
                  <span v-if="scope.row.attachSize / 1024 / 1024 < 1">{{(scope.row.attachSize / 1024).toFixed(2) + 'KB'}}</span>
                  <span v-else>{{(scope.row.attachSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="createTime" label="上传时间"></el-table-column>
            <el-table-column width="150px" label="操作">
                <template slot-scope="scope">
                    <el-button size="small" type="text">
                        <a @click="downloadFile(scope.row.attachName,scope.row.attachUrl)">下载</a>
                    </el-button>
                    <el-button size="small" type="text" @click="deleteHandle(scope.row.id)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-form>
  </basic-container>
</template>

<script>
import {
getObj,
addObj,
putObj,
fetchList,
getnoticeId,
delObj
} from ‘@/api/policy/noticeattachment’
import store from ‘@/store’
import { mapState} from ‘vuex’
export default {
data() {
return {
dataForm: {
id: 0,
noticeId: ‘’,
attachName: ‘’,
attachUrl: ‘’,
attachSize: ‘’,
},
dataList: [],
headers: {
‘Authorization’: 'Bearer ' + store.getters.access_token,
},
}
},
methods: {
init(id) {
this.dataForm.noticeId = id
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…confirm(‘是否确认删除该附件’, ‘提示’, {
confirmButtonText: ‘确定’,
cancelButtonText: ‘取消’,
type: ‘warning’
}).then(function () {
return delObj(id)
}).then(data => {
this.KaTeX parse error: Expected 'EOF', got '}' at position 469: …n punctuation">}̲</span><span cl…message.success(‘添加成功’)
this.getDataList()
})
}
}
}
</script>
<style lang=“scss” scoped=“scoped”>
.down >>> a {
color: #409EFF;
}
</style>

elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示,vue.js,前端,javascript

上传文件大小与文件类型校验

  1. 可以在beforeUpload方法中进行过滤。
  2. 使用accept参数

我自己的项目里暂时没有限制,后续有需求的话会进行更新。这里不做过多概述。
下面po官网代码:

<el-upload
  class="avatar-uploader"
  action="https://jsonplaceholder.typicode.com/posts/"
  :show-file-list="false"
  :on-success="handleAvatarSuccess"
  :before-upload="beforeAvatarUpload">
  <img v-if="imageUrl" :src="imageUrl" class="avatar">
  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

<script>
export default {
data() {
return {
imageUrl: ‘’
};
},
methods: {
handleAvatarSuccess(res, file) {
this.imageUrl = URL.createObjectURL(file.raw);
},
beforeAvatarUpload(file) {
const isJPG = file.type === ‘image/jpeg’;
const isLt2M = file.size / 1024 / 1024 < 2;

    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isJPG<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
      <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'上传头像图片只能是 JPG 格式!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isLt2M<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
      <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'上传头像图片大小不能超过 2MB!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> isJPG <span class="token operator">&amp;&amp;</span> isLt2M<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

}
</script>

差不多使用到的就这些啦,如果有新需求会继续记录。文章来源地址https://www.toymoban.com/news/detail-807153.html

到了这里,关于elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elementUI 的上传组件<el-upload>,自定义上传按钮样式

    原理:调用el-upload组件的方法唤起选择文件事件 效果: 页面代码: js代码:(其他逻辑与element文档的上使用一致) css代码: 隐藏原来的选择图片按钮 原理:把图片显示分离出来,el-upload做选择图片使用,单独做一个显示图片的区域 效果:  页面代码: js 代码: css代码:

    2024年02月13日
    浏览(42)
  • Vue+elementUI中的el-upload实现上传文件给后端,限制上传文件的格式、文件的大小、文件的数量,将表单和Excel文件一起提交给后端

    需求:1.表单输入信息 2.上传Excel附件 3.下载附件模板 4.限制上传文件的格式、文件的大小、文件的数量 5.将表单和Excel文件一起提交给后端 效果图: 样式部分 data部分代码 method中的代码

    2024年02月12日
    浏览(60)
  • 使用element-ui的el-upload进行excel文件上传与下载

    需求:前端上传文件后,后端接受文件进行处理后直接返回处理后的文件,前端直接再将文件下载下来。 通常我们都是直接使用el-upload的action属性来直接完成文件上传的操作,如果要进行后续文件的直接下载,可以在on-success中用代码进行操作,若存在401权限问题也可以直接

    2024年02月11日
    浏览(45)
  • 【前端相关】elementui使用el-upload组件实现自定义上传

    elmentui 中的upload默认的提交行为是通过 action 属性中输入的 url 链接,提交到指定的服务器上。但是这种url提交文件的方式,在实际的项目环境中往往是不可取的。 我们的服务器会拦截所有的请求,进行权限控制,密钥检查,请求头分析等安全行为控制。写在这里的url无法实

    2024年02月08日
    浏览(60)
  • ElementUi 关于 el-upload的自定义上传(http-request)的使用

       在开发中 遇到如下需求,要求前端传参并导入excel表格。导入失败,要弹出错误信息,同时导出错误信息的excel表格,导入成功提示信息即可。 参考官方文档,把上传需要的属性加加入使用   改造之前: 设置headers信息 在el-upload标签中加入http-request ,如下: 具体操作方法

    2024年02月01日
    浏览(40)
  • el-upload上传图片和视频,支持预览和删除

    话不多说, 直接上代码: 视图层: 逻辑层: 上传附件没有使用单独的上传接口,是调用添加记录接口时,统一传参保存。添加接口请求成功后再回显。 因为我们的需求是在详情页面也能编辑图片和视频,所以加了`type`字段,1代表删除,2代表保留,添加的话就不传。如果你

    2024年02月15日
    浏览(73)
  • el-upload调用内部方法删除文件

    从Element UI 的官方文档中, Upload 上传组组件提供了on-remove和before-remove的文件删除的钩子属性(回调方法名),但如何调用组件删除方法(让该方法删除本地上传文件列表以及触发这两个钩子)并无相关说明。 在不定义file插槽(slot)的情况下,通过UI点击控件文件列表上文件的

    2024年02月10日
    浏览(31)
  • el-upload实现上传文件夹

    背景:如图一所示,最下面有一个黄色上传文件按钮,为手动上传而且上传区域有上传文件和上传文件夹的区分 所以需要在点击了上传文件夹做特殊处理使得el-upload可以上传文件夹 01.在拖拽上传的区域绑定一个点击事件 handlePreview ,(注意不要直接绑定在el-upload区域,会被触

    2024年02月07日
    浏览(58)
  • el-upload上传文件携带额外参数

    在进行文件上传时,需要传递其他参数,比如下图中需要实现携带下拉框的参数 前端实现:将下拉框中的参数 传递到:data中  :data=\\\"{\\\'script_model\\\':script_model}\\\"    后端实现: 从post请求中获取携带的参数:  script_model = request.POST.get(\\\'script_model\\\')

    2024年02月11日
    浏览(59)
  • el-upload 文件上传组件的使用

    element-ui官网 element ui=upload上传组件 Upload 上传文件这个功能是我们在企业实际开发当中使用频率是非常高的这样一个文件上传的功能,,element ui组件组也给我们提供了上传的组件。所有我们一定要熟悉掌握它 使用之前先进行一下element ui的安装和配置 打开终端=输入npm i elem

    2024年02月11日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包