jQuery ajax 拓展文件上传

HTML

<input name='' type="file" id="file-uploader">

js (公共js中配置以下代码)

以下文件依赖 jQuery 所以需要提前引入,alert 提示非常影响用户体验,可自定义提示样式

/**
 * 上传
 * @param {String} uploadUrl 上传服务地址
 * @param {String} fileType 上传类型:图片 1,视频 2,文件 3,音频 4
 * @param {Number} maxSize 限制上传文件大小,单位b 例:5*1024 限制大小为5Kb
 * @param {Function} beforeUpload 上传前的处理,返回本地路径和当前dom
 * @param {Function} uploaded 上传完成后的回调,返回完整路径
 */
$.fn.uploader = function (config) {
	var opt = $.extend({
		uploadUrl: '', //此处配置默认url
		fileType: 1,
		type: [],
		beforeUpload: function () {},
		uploaded: function () {}
	}, config);
	if (!opt.type.length) {
		switch (opt.fileType) {
			case 1:
				opt.type = ['jpg', 'jpeg', 'gif', 'bmp', 'png'];
				break;
			case 2:
				opt.type = ['mp4', 'webm'];
				break;
			case 3:
				opt.type = ['doc', 'xls', 'ppt', 'pdf', 'docx', 'xlsx', 'pptx', 'txt', 'wps'];
				break;
			case 4:
				opt.type = ['mp3', 'ac3'];
				break;
			default:
				alert('参数配置错误');
		}
	}
	$(this).each(function () {
		$(this).off('change').on('change', function () {
			var $this = $(this),
				fd = new FormData();
			if (opt.beforeUpload({
					url: URL.createObjectURL($this[0].files[0]),//获取本地文件路径
					el: $this
				}) === false) {
				$this.val('');
				return;
			}
			if (opt.type.indexOf($this[0].files[0].name.split('.').reverse()[0].toLowerCase()) < 0) {
				alert('只能上传 ' + opt.type.join(', '));
				$this.val('');
				return;
			}
			// 图片大小检测
			if (opt.maxSize && $this[0].files[0].size > opt.maxSize) {
				alert('最大只能上传 ' + (opt.maxSize / 1024) + 'kb');
				$this.val('');
				return;
			}
			fd.append('fileType', opt.fileType + '');
			fd.append('file', $this[0].files[0]);
			//contentType 请求头 默认值是  setRequestHeader("Content-type","application/x-www-form-urlencoded");false的含义是 不额外的设置头
			//processData是否会转化数据,如果要发送formData 设置为false 不需要转化
			$.ajax({
				url: opt.uploadUrl,
				type: 'post',
				data: fd,
				contentType: false, // 当有文件要上传时,此项是必须的,否则后台无法识别文件流的起始位置
				processData: false, // 是否序列化data属性,默认true(注意:false时type必须是post)
				success: function (data) {
					$this.val('');
					opt.uploaded({
						name: data.fileName.replace(/<|>|\/|\\/g, ''),
						url: data.url,
						suffix: data.suffix,
						el: $this
					});
				}
			})
		});
	});
};

方法调用

$('#file-uploader').uploader({
	type: ['jpg', 'gif', 'png'],
	maxSize: 5 * 1024 * 1024,  //5M
	beforeUpload: function (data) {
		//上传之前的操作
		console.log(data);
		let img = new Image();
		img.src = data.url;
		img.onload = () => {
			//判断如果img的宽高不为下面尺寸,则禁止上传
			if (!((img.width === 512 || img.width === '512') && (img.height === 1024 || img.height === '1024'))) {
				return false;
			}
		}
	},
	uploaded: function (data) {
		//上传成功后的操作
		console.log(data);
	}
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值