Html input file控件使用accept过滤文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivian_ljx/article/details/50316765

Html input file控件使用accept过滤文件

<input type="file" accept=".txt" >
弹出的文件选择框只显示txt文件

------------------------------------------------------------------------------

input type=file accept中可以限制的文件类型

accept这个属性,只在FF,ie10和chrome中有效。那么accept能限制哪些文件呢?见下表。 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
*.xltapplication/vnd.ms-excelMS Excel Template
*.xlwapplication/vnd.ms-excelMS Excel Workspace
*.xmltext/xml, application/xmlExtensible Markup Language
*.zipaplication/zipCompressed Archive
补充office2007以后的文件格式:
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
.potx application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.sldx application/vnd.openxmlformats-officedocument.presentationml.slide
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.xlsm application/vnd.ms-excel.addin.macroEnabled.12
.xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于 vue-upload-component 的完整的美观的,多文件上传示例: 首先,我们需要安装 vue-upload-component: ``` npm install vue-upload-component --save ``` 然后,在 Vue 组件中引入和使用 vue-upload-component: ```html <template> <div> <vue-upload-component ref="upload" :url="uploadUrl" :headers="uploadHeaders" :multiple="true" :data="{userId: userId}" :accept="'image/*'" :extensions="allowedExtensions" :maxSize="maxFileSize" :withCredentials="true" @input-filter="handleInputFilter" @before-upload="handleBeforeUpload" @uploading="handleUploading" @upload-success="handleUploadSuccess" @upload-error="handleUploadError" > <template v-slot:default> <div class="upload-area"> <div v-if="!isUploading"> <i class="iconfont icon-add"></i> <span class="text">点击上传</span> </div> <div v-else> <i class="iconfont icon-loading"></i> <span class="text">上传中...</span> </div> </div> </template> </vue-upload-component> <div class="preview-area"> <div v-for="(file, index) in uploadedFiles" :key="file.id"> <img :src="file.url" class="preview-image"> <div class="preview-name">{{ file.name }}</div> <div class="preview-size">{{ fileSize(file.size) }}</div> <div class="preview-delete" @click="deleteFile(index)">删除</div> </div> </div> </div> </template> <script> import VueUploadComponent from 'vue-upload-component' export default { components: { VueUploadComponent }, data() { return { userId: '123456', uploadUrl: 'https://example.com/upload', uploadHeaders: { Authorization: 'Bearer ' + localStorage.getItem('token') }, allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'], maxFileSize: 10 * 1024 * 1024, // 10MB isUploading: false, uploadedFiles: [] } }, methods: { handleInputFilter(uploadData) { // 文件过滤器 if (uploadData.file.type.indexOf('image/') !== 0) { return Promise.reject('只能上传图片文件') } return Promise.resolve(uploadData) }, handleBeforeUpload(uploadData) { // 开始上传前的回调 this.isUploading = true return uploadData }, handleUploading(uploadData) { // 正在上传的回调 console.log('uploading', uploadData.progress) }, handleUploadSuccess(uploadData) { // 上传成功的回调 console.log('success', uploadData.url) this.uploadedFiles.push({ id: uploadData.response.id, name: uploadData.file.name, size: uploadData.file.size, url: uploadData.response.url }) this.isUploading = false }, handleUploadError(uploadData) { // 上传失败的回调 console.error('error', uploadData.error) this.isUploading = false }, fileSize(size) { // 文件大小格式化 if (size < 1024) { return size + 'B' } else if (size < 1024 * 1024) { return (size / 1024).toFixed(2) + 'KB' } else { return (size / 1024 / 1024).toFixed(2) + 'MB' } }, deleteFile(index) { // 删除已上传的文件 this.uploadedFiles.splice(index, 1) } } } </script> <style> .upload-area { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 200px; height: 200px; border: 2px dashed #ccc; cursor: pointer; } .text { margin-top: 10px; font-size: 16px; color: #666; } .iconfont { font-size: 48px; color: #ccc; } .icon-add:before { content: '\e600'; } .icon-loading:before { content: '\e602'; animation: loading 1s infinite linear; } @keyframes loading { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .preview-area { display: flex; flex-wrap: wrap; margin-top: 20px; } .preview-image { width: 150px; height: 150px; object-fit: cover; margin-right: 10px; margin-bottom: 10px; } .preview-name { margin-top: 5px; font-size: 14px; color: #666; } .preview-size { margin-top: 5px; font-size: 14px; color: #666; } .preview-delete { margin-top: 5px; font-size: 14px; color: #f44336; cursor: pointer; } </style> ``` 上面的示例中,我们定义了一个上传区域的样式,当用户点击上传区域时,会触发 vue-upload-component 的文件选择框。用户选择图片文件后,会触发相应的回调函数,我们可以在这些回调函数中处理上传过程中的各种情况,比如文件过滤、上传前的准备工作、正在上传、上传成功、上传失败等。 接着,我们在组件中定义 uploadedFiles 数组,用于存储已上传的文件信息。当一个文件上传成功后,我们将该文件的信息添加到 uploadedFiles 数组中,并在页面上展示出来。用户可以通过点击删除按钮删除已上传的文件。 这个示例是一个多文件上传的例子,您可以根据实际需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值