input file accept限制文件上传类型

input file accept限制文件上传类型一、需求上传文件只允许上传doc、docx、jpg、png、gif和pdf格式的文件,需要在前后端进行双重限制二、前端实现1、前端限制通过inputfileaccept属性实现,在accept中以逗号分隔开【图一】,便可以实现选择文件时,默认只可选择设定格式的文件【图二】,需要说明的是,MIME格式image/jpeg对应.jpg,.jpeg等几种格式,不能达…

大家好,又见面了,我是你们的朋友全栈君。

一、需求

    上传文件只允许上传doc、docx、jpg、png、gif和pdf格式的文件,需要在前后端进行双重限制

二、前端实现

1)前端限制

     通过input file accept属性实现,在accept中以逗号分隔开【图一】,便可以实现选择文件时,默认只可选择设定格式的文件【图二】,需要说明的是,MIME格式image/jpeg对应.jpg,.jpeg等几种格式,不能达到只单独限制jpg格式的,js再次过滤提示即可。

图一

<input type="file" name="attach_path" value="" accept="application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/jpeg,image/png,image/gif,application/pdf">

图二input file accept限制文件上传类型

2)【图二】中可以看到,默认只选择accept中自定义格式的文件,下拉中依旧可以选择所有文件,如果需要前端更严密的控制,可以通过  js 再次验证处理;

不使用上传附件插件,使用通用的input file方式添加js验证格式方法:

$('input[type="file"]').live("change", function () {
	var file = this.files && this.files [0];
	if (file) {
		//判断文件格式
		var index= file.name.lastIndexOf(".");//获取最后一个.的位置
		var ext = file.name.substr(index+1);//获取后缀
		var pattern = /^(doc|docx|jpg|jpeg|png|gif|xls|xlsx|txt|html|htm|zip|rar|pdf)$/;
		if(!pattern.test(ext))
		{
			alert("文件格式不支持");
			return false;
		}
		var filename = file['name'];
		var row = $("<li>", {class: "row"});
		row.append('<span class="path-name">' + filename + '</span>');
		row.append('<a href="javascript:;" class="js-del-row el-icon-delete"></a>');
		$(this).parent().prepend('<input type="file" class="hide">');
		this.name = "attach[]";
		row.append(this); 
	}
});

3)快速查看上传文件的mine类型

1、方法1:

        后台直接打印var_dump($_FILES);exit;打印信息中即可看到

        input file accept限制文件上传类型

2、方法2:

前端打印

$('input[type="file"]').live("change", function () {
	var file = this.files && this.files [0];
	console.log(file)
});

 input file accept限制文件上传类型

 3、遇到的问题

百度查到.rar对应的mine类型为application/x-rar-compressed,但是写入accept中后,上传文件窗口并未显示rar的限制;
通过后端打印rar的类型为application/octet-stream,写入accept中并未显示rar的限制;

input file accept限制文件上传类型

通过前端打印rar的类型为空,最后不得已使用name获取后缀名称进行的文件格式验证

input file accept限制文件上传类型

 

 

4)input file accept的兼容情况,此图仅用来说明accept有兼容情况,随着时间的推移,兼容情况有变,请自行注意哦。

input file accept限制文件上传类型

5)input file accept中限制的格式为MIME格式,根据需求添加对应的MIME格式即可,不同的应用程序支持不同的 MIME 类型,所以每个MIME设置后对应的一个或者多个格式,以最终添加文件时显示的自定义文件类型为准。
     MIME 参考手册

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160962.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ubuntu中的dpkg命令「建议收藏」

    Ubuntu中的dpkg命令「建议收藏」Linux命令学习系列之dpkg命令详解   普通dpkg用法   dpkg-i安装一个Debian包裹文件,如你手动下载的文件。   dpkg-c列出的内容。   dpkg-I从中提取包裹信息。   dpkg-r移除一个已安装的包裹。   dpkg-L列出安装的所有文件清单。同时请看dpkg-c来检查一个.deb文件的

    2022年5月22日
    37
  • java编程基础(入门级)(超级完整版)「建议收藏」

    java编程基础(入门级)(超级完整版)「建议收藏」java基础编程01基础知识1.计算机基础【1】进制A.十进制转化二进制除以2,求余数,商继续除以2,一直到0为止,从底下往上得到结果。B.二进制转化十进制1|1|0|023∣22∣21∣202^3|2^2|2^1|2^023∣22∣21∣208+4+0+0=128+4+0+0=128+4+0+0=12【2】计算机的储存方式位(bit):0或1字节(byte):8位1字节,数据储存的最小单位1KB=1024Byte1MB=1024KB1GB=

    2022年6月10日
    26
  • 我的世界区块显示_我的世界怎么显示区块线

    我的世界区块显示_我的世界怎么显示区块线我的世界手游区块是一个独特的机制,很多玩家对于区块是什么不太了解,区块显示指令以及区块的产生不是很熟悉,为了帮助到大家,今天小编就为大家带来我的世界手游区块显示指令分享:区块玩法操作详解的内容,希望大家能够喜欢,下面就让我们一起来看看吧!区块相关1.出生点区块在出生点附近的区块是一块围绕世界出生点的区域中的一个区块,只要有玩家在主世界,它就不会被从内存中卸载。这意味着像红石元件和刷怪会继续,甚至所…

    2025年12月11日
    4
  • windows默认颜色设置_微信怎么设置颜色皮肤

    windows默认颜色设置_微信怎么设置颜色皮肤emwin使用了默认皮肤之后就不能够容易的重新设置颜色。这边我提供一种解决的方法,以button为例子。正常设置皮肤BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);后效果如下:此时设置颜色并没有效果。换成如下代码,/*************************定制皮肤*****************************/   BUTTON_…

    2022年8月31日
    3
  • Java四舍五入保留两位小数

    Java四舍五入保留两位小数文章目录Java四舍五入保留两位小数一、前言环境二、正文BigDecimalDecimalFormatMathcommons-math3String#formatJava四舍五入保留两位小数一、前言环境开发工具:IntelliJIDEAJDK:1.8BigDecimal:https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.htmlDecimalFormat:https://docs.oracle.com/java

    2022年5月21日
    35
  • 自编R计算MSE(均方误差)[通俗易懂]

    自编R计算MSE(均方误差)[通俗易懂]基本原理1.生成关于x1~N(5,3),x2~N(100,10),error~N(0,1)2.自己定一个实际对线性回归模型,并计算得到真实的yy=1.5+0.8×1+1.8×2+error3.对x1,x2进行线性拟合,当然这里也可以自写函数用最小二乘法原理,进行参数对估计4.提取的每一个beta1,beta25.计算他的均方误差,计算公式代码k=100000#定义实验次数beta_x1=c()#定义空列beta_x2=c()for(iin1:k){

    2022年9月1日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号