vue 上传文件方式和上传文件格式和大小限制 实现

24 篇文章 0 订阅
1 篇文章 0 订阅

其实打开文件资源对话框的方式有好几种,但是世界使用input控件是最直接和方便的那种。

ok,直接先上代码。

<zl-button size="mini" class="upload-file">
	<input @change="fileUpload" type="file" accept=".xls,.xlsx" ref="uploadFile" v-if="!isUping"/>
	<font v-if="!isUping">上传文件</font>
	<cite v-if="isUping" :style="{width:progressWidth+'%'}" >{{progressWidth+"%"}}</cite>
</zl-button>

其中input是打开文件资源对话框的控件,type='file', accept是默认可接收的文件格式,也就是默认筛选的文件格式,@change事件是你选择了文件文件,点击打开按钮之后,触发的事件。

至于为什么一起封装在一个button里面,是为了能显示一个类似加载文件的进度条,这个看需求,可加可不加。

现在主要来看如何筛选文件。

其实accept只能筛选默认的文件格式,比如这里,我只是默认筛选.xls,.xlsx,但是如果你选择所有文件,还是能上传别的格式的文件的,如下:

如果你选择显示所有格式的文件,那其实这个accept就是个摆设而已。

所有最好还是要在js代码里,手动再筛选,限制一次。

先上代码:

其中,获取上传文件的方法有两种:

1,通过 ref 获取

2,通过id获取

然后,获取上传的文件的后缀名,方法也有多种,这里就直接用分割字符串的方式,获取后缀名,然后与允许的文件格式后缀名数组进行比对。

当然,还有一种方式,可以不需要获取后缀名,直接拿上传文件可接收的文件Media Types(MIME)在accept上做限制。

常见文件格式MIME对照表如下:

扩展名 MIME 描述

*.3gppaudio/3gpp, video/3gpp3GPP Audio/Video
*.ac3audio/ac3AC3 Audio
*.asfallpication/vnd.ms-asfAdvanced Streaming Format
*.auaudio/basicAU Audio
*.csstext/cssCascading Style Sheets
*.csvtext/csvComma Separated Values
*.docapplication/mswordMS Word Document
*.dotapplication/mswordMS Word Template
*.dtdapplication/xml-dtdDocument Type Definition
*.dwgimage/vnd.dwgAutoCAD Drawing Database
*.dxfimage/vnd.dxfAutoCAD Drawing Interchange Format
*.gifimage/gifGraphic Interchange Format
*.htmtext/htmlHyperText Markup Language
*.htmltext/htmlHyperText Markup Language
*.jp2image/jp2JPEG-2000
*.jpeimage/jpegJPEG
*.jpegimage/jpegJPEG
*.jpgimage/jpegJPEG
*.jstext/javascript, application/javascriptJavaScript
*.jsonapplication/jsonJavaScript Object Notation
*.mp2audio/mpeg, video/mpegMPEG Audio/Video Stream, Layer II
*.mp3audio/mpegMPEG Audio Stream, Layer III
*.mp4audio/mp4, video/mp4MPEG-4 Audio/Video
*.mpegvideo/mpegMPEG Video Stream, Layer II
*.mpgvideo/mpegMPEG Video Stream, Layer II
*.mppapplication/vnd.ms-projectMS Project Project
*.oggapplication/ogg, audio/oggOgg Vorbis
*.pdfapplication/pdfPortable Document Format
*.pngimage/pngPortable Network Graphics
*.potapplication/vnd.ms-powerpointMS PowerPoint Template
*.ppsapplication/vnd.ms-powerpointMS PowerPoint Slideshow
*.pptapplication/vnd.ms-powerpointMS PowerPoint Presentation
*.rtfapplication/rtf, text/rtfRich Text Format
*.svfimage/vnd.svfSimple Vector Format
*.tifimage/tiffTagged Image Format File
*.tiffimage/tiffTagged Image Format File
*.txttext/plainPlain Text
*.wdbapplication/vnd.ms-worksMS Works Database
*.wpsapplication/vnd.ms-worksWorks Text Document
*.xhtmlapplication/xhtml+xmlExtensible HyperText Markup Language
*.xlcapplication/vnd.ms-excelMS Excel Chart
*.xlmapplication/vnd.ms-excelMS Excel Macro
*.xlsapplication/vnd.ms-excelMS Excel Spreadsheet
*.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetMS Excel Spreadsheetml.sheet
*.xltapplication/vnd.ms-excelMS Excel Template
*.xlwapplication/vnd.ms-excelMS Excel Workspace
*.xmltext/xml, application/xmlExtensible Markup Language
*.zipaplication/zipCompressed Archive

更详细的看这个链接:http://www.iana.org/assignments/media-types/media-types.xhtml

关于文件大小限制,就相对来说更简单了。

追后根据后端接口,把文件传给后端就ok了。

    let params = new FormData()
    params.append('file', m.file)
	params.append('name', m.file.name)
	ajax.call(m,url,params,(res,err)=>{
		if(res.status!="200"){
			m.$message.warning(res.data.msg)
		}else{
			m.$message.success("上传成功")
			m.$emit('importDeviceSuccess')
		}
		setTimeout(()=>{
			m.isUping=false
		},2000)
	},m.isRequest, undefined, true)

 

这是一个比较简单,正常的上传文件流程,具体的特殊情况可能还需要具体再讨论。

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值