ElementUI 上传文件以及限制

发布时间:2021-02-23 09:17:22编辑:admin阅读(12)

一、概述

现有项目中,涉及文件上传。要求:

1. 文件必须是excel

2. 只能上传1个文件

3. 文件大小不能超过5M

二、Upload 上传

注意:ElementUI Upload 上传,需要和后端api结合才能使用。

演示环境使用django,版本为:3.1.5

新建django项目

新建django项目,项目名为upload_demo,app名为api

安装以下模块Django==3.1.5

djangorestframework==3.11.1

django-cors-headers==3.5.0

以上是我环境的版本,这里不做强制要求,安装最新版本即可。

注意:django-cors-headers是用来解决跨域问题的。

修改upload_demo/settings.py

注册appINSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'api.apps.ApiConfig',

'rest_framework',

'corsheaders',  # 注册应用cors

]

中间件增加MIDDLEWARE = [

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.common.CommonMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

'corsheaders.middleware.CorsMiddleware', # 注册组件cors

]

最后一行增加#跨域增加忽略

CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_ALLOW_ALL = True

# CORS_ORIGIN_WHITELIST = (

#     'http://',

# )

CORS_ALLOW_METHODS = (

'DELETE',

'GET',

'OPTIONS',

'PATCH',

'POST',

'PUT',

'VIEW',

)

CORS_ALLOW_HEADERS = (

'XMLHttpRequest',

'X_FILENAME',

'accept-encoding',

'authorization',

'content-type',

'dnt',

'origin',

'user-agent',

'x-csrftoken',

'x-requested-with',

'Pragma',

)

修改api/views.py,增加视图函数from rest_framework.views import APIView

from upload_demo import settings

from django.shortcuts import render, redirect, HttpResponse

from django.http import JsonResponse

from rest_framework import status

import os

import uuid

class File(APIView):

def post(self, request):

print(request.FILES)

# 接收文件

file_obj = request.FILES.get('file', None)

print("file_obj", file_obj.name)

# 判断是否存在文件夹

head_path = os.path.join(settings.BASE_DIR,'upload')

print("head_path", head_path)

# 如果没有就创建文件路径

if not os.path.exists(head_path):

os.makedirs(head_path)

# 判断文件大小不能超过5M

if file_obj.size > 5242880:

return JsonResponse({'status': status.HTTP_403_FORBIDDEN, 'msg': '文件过大'},

status=status.HTTP_403_FORBIDDEN)

# 文件后缀

suffix = file_obj.name.split(".").pop()

print("文件后缀", suffix)  # 图片后缀 png

# 判断文件后缀

suffix_list = ["xlsx","xls"]

if suffix not in suffix_list:

return JsonResponse({'status': status.HTTP_403_FORBIDDEN, 'msg': '只能选择excel文件'},

status=status.HTTP_403_FORBIDDEN)

# 重命名文件名

file_name = '%s.%s'%(uuid.uuid4(),suffix)

print("file_name",file_name)

# 储存路径

file_path = os.path.join(head_path,file_name)

print("储存路径", file_path)

# 写入文件到指定路径

with open(file_path, 'wb') as f:

for chunk in file_obj.chunks():

f.write(chunk)

data = {}

data['name'] = file_name

return JsonResponse({'status': status.HTTP_200_OK, 'data': data}, status=status.HTTP_200_OK)

修改upload_demo/urls.pyfrom django.contrib import admin

from django.urls import path

from api import views

urlpatterns = [

path('admin/', admin.site.urls),

path('file/excel_upload/',views.File.as_view())

]

启动django项目,访问链接为:http://127.0.0.1:8000/

新建vue测试页

安装axiosnpm install axios --save

test.vue

class="upload-demo" :multiple='false' :auto-upload='true' list-type='text' :show-file-list='true'

:before-upload="beforeUpload" :before-remove="beforeRemove" :drag='true' action='' :limit="1" :on-exceed="handleExceed"

:http-request="uploadFile" accept=".xlsx" >

点击上传,仅限excel文件

提交

// 导入模块

import axios from 'axios'

export default {

components: {

axios

},

data() {

return {

isUpload:false,  // 是否上传文件

}

},

mounted: function() {

},

methods: {

// 上传文件之前的钩子

beforeUpload(file) {

//判断文件格式

let hz = file.name.split('.').pop()

// console.log("hz",hz)

if (hz != 'xlsx' && hz != 'xls') {

this.$message.error(`只能选择excel文件`)

return false

}

// 判断文件大小

let fileSize = file.size / 1024 / 1024

if (!fileSize) {

this.$message.error('上传文件大小不能超过 5MB')

return false

}

this.isUpload = true

},

// 删除文件之前的钩子

beforeRemove(file){

this.isUpload = false

},

// 上传文件个数超过定义的数量

handleExceed(files, fileList) {

this.$message.warning(`当前限制选择 1 个文件,请删除后继续上传`)

},

// 上传文件

uploadFile(item) {

let _this = this

let fileObj = item.file

const form = new FormData()// FormData 对象

form.append('file', fileObj)// 文件对象  'upload'是后台接收的参数名

axios({

url: 'http://127.0.0.1:8000/file/excel_upload/',

data: form,

method: 'POST',

contentType: 'multipart/form-data',

processData: false //告诉jquery不要对form进行处理

// contentType: false, //指定为false才能形成正确的Content-Type

})

.then(function(res) {

// console.log('上传成功', res)

// console.log("上传路径",res.data.excel_file_path)

_this.$message.success("上传成功")

})

.catch(function(err) {

let res = err.response

// console.log('失败', res)

_this.$message.error(res.data.msg)

})

},

// 检查是否上传

onSubumit(){

if (this.isUpload == false){

this.$message.error("请上传excel文件")

return false

} else {

this.$message.success("文件已上传")

return true

}

},

}

}

请自行修改路由

访问vue测试页,效果如下:

上传非excel文件,效果如下:

上传大于5M的excel文件,效果如下:

上传正确的excel文件,效果如下:

查看接口返回信息,效果如下:

查看django项目的upload目录,就可以看到上传的文件了。

关键字:

下一篇:

没有了

element提交图片限制一张_ElementUI 上传文件以及限制相关推荐

  1. element提交图片限制一张_element-ui上传图片限制图片比例

    在utils里新建imageRatio.js naturalWidth 支持ie9及以上 我用img.width获取不到,都是0,所以用naturalWidth import {Message} fr ...

  2. html文件上传数量限制,使用HTML中的input上传文件最多可以上传多少张?

    问题描述 我使用flask作为web框架搭建了一个小网站,在网站里我基于bootstrap-fileinput实现了文件上传的功能,在上传文件的时候发现最多只能上传1212张,但是我的需求是要能一次上 ...

  3. [html] input上传文件可以同时选择多张吗?怎么设置?

    [html] input上传文件可以同时选择多张吗?怎么设置? <input type="file" multiple /> 个人简介 我是歌谣,欢迎和大家一起交流前后 ...

  4. [html] input上传文件可以同时选择多张吗?怎么设置?

    [html] input上传文件可以同时选择多张吗?怎么设置? <input type="file" multiple="multiple" value= ...

  5. 【vue开发问题-解决方法】(九)使用element upload自定义接口上传文件,input多文件上传

    [vue开发问题-解决方法](九)使用element upload自定义接口上传文件,input多文件上传 参考文章: (1)[vue开发问题-解决方法](九)使用element upload自定义接 ...

  6. vue+element实现天翼云oos上传文件

    最近遇到了一个新的需求,需要把原先上传文件的方式改为利用天翼云oos对象存储上传.这个问题着实卡了我好几天时间,不过方法总比困难多,最后也是成功实现文件的上传.话不多说,接下来列举实现步骤.(实现过程 ...

  7. elementui展示多张图片_elementUI 上传多张图片并预览大图左右切换

    前段时间项目需求中涉及到上传多张图片 当条信息查看时可预览大图功能,项目框架vue.js+elementUI,抽时间在此做个整理记录,如有更好的方法 欢迎大家互相交流 页面列表更多操作-修改-先选择图 ...

  8. element 框架 el-upload 上传文件问题

    在使用Vue+element 中的el-upload组件做文件上传时,最根本的原因是把路径写错,导致系统提示跨域错误,直接看代码: <el-upload:action="targetA ...

  9. 结合axios(formdata)+vue-cropper+element ui实现头像图片剪切上传

    萌新用vue + axios + formdata 上传文件的爬坑之路 https://blog.csdn.net/qq_41688165/article/details/80834842 结合vue ...

  10. vue element upload 控件用form-data上传方式导入xls文件

    <!-- 导入---------------------------------------- --><el-uploadstyle="margin-right: 10px ...

最新文章

  1. 快速理解平衡二叉树、B-tree、B+tree、B*tree
  2. 用java调用oracle存储过程总结一
  3. 黑火药跟黄火药的区别在哪里?
  4. HashMap与HashTable联系与区别
  5. 斐波那契数列 C++ 实现代码
  6. java中 在一个异常处理中什么语句块是可多个的
  7. RunTime之类与对象
  8. WPS宏开发之VBA宏转JS宏
  9. 希腊字母发音,打印体手写体对照
  10. JavaWeb项目-快递代领-需求分析(二)-软件工程-小组项目
  11. 手游平台开发怎么做?
  12. 用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇
  13. 用Vs调试STM32记事
  14. Git 上传忽略文件设置 .ignore exclude
  15. 如何用个人电脑利用ipv6搭建网站
  16. 利用Qt Linguist将英文翻译为汉语
  17. 如何报名拼多多官方活动?万顿思电商
  18. mac os x在PC上安装
  19. 知识点滴 - 无线电通信(P25)的物理信道和逻辑信道
  20. xcode6 如何下载ios7模拟器

热门文章

  1. openCV 出现 0x770413C5 (ntdll.dll) 第一机会异常: 0xC0000005: 读取位置 0x00000008 时发生访问冲突 解决办法
  2. C++, RAII, and the GSL Refresher
  3. informix mysql_Informix数据库查看数据库大小
  4. 拼图c语言程序,C语言实现拼图小游戏
  5. npm install 提示 path .../node_modules/node-sass command failed
  6. kettle Call From LAPTOP-14BPR3NI/192.168.1.2 to locahost:8020 failed on connection
  7. 《涨知识啦34》-LED器件的I-V特性曲线
  8. kali的vmtool工具安装
  9. Java工具类实现excel转pdf结果几乎一模一样
  10. php查询qq等级,php仿QQ等级太阳显示函数_php