js实现文件上传、文件预览、拖拽上传的方法

一、文件上传

1、上传的html

我们可以使用input实现文件上传

<input type="file" id="upload">

2、访问上传的文件

通过dom访问
const input = document.querySelector("#upload");
const files = input.files;
通过onchange事件访问
const input = document.querySelector("#upload");
input.addEventListener('change',function(){
	// 通过onchange事件获取files,函数要使用function定义,箭头函数this指向父级作用域
	const files = this.files;
},false);

input.addEventListener('change',(e) => {
	// 这个本质还是通过Dom获取文件
	const files = e.target.files;
},false);

3、自定义input

通常,我们在实际的开发中不会真的去使用input标签原本的样式,我们需要实现自己想要的按钮,或者其他的样式.这个时候,我们需要对input的样式进行定制.input上传,无非就是点击input的按钮=>弹出弹窗=>选择文件=>获取文件=>完成上传这么一个过程.如果我们自己写一个button,用自定义的button触发input就可以代替input进行上传文件了.所以我们可以隐藏input,用任意dom元素通过click代理input的点击事件.原理就说到这里.

const input = document.querySelector("#upload");
/* 通过调用input.click(),可以唤起文件选择弹窗,
*  所以你可以在button的点击事件里去调用这个方法,达到代理的目的
*/
input.click();

二、文件预览

方法1:通过FileReader实现
const input = document.querySelector("#upload");
input.addEventListener('change',function(){
	const files = this.files;
	const fileList = Object.entries(files).map(([_,file]) => {
		const reader = new FileReader();
		reader.readAsDataURL(file);
		reader.onload = (e) => {
			file.preview = e.target.result;
		}
		return file;
	});
	
	/* 
	*  file中的preview存的就是可以预览使用url,如果你需要保证fileList的顺序,
	*  请不要使用这种方式,你可以采用索引的方式存储,来保证它的顺序一致性
	*/
	console.log(fileList);
},false);
方法2:通过window.URL.createObjectURL()实现
const input = document.querySelector("#upload");
input.addEventListener('change',function(){
	const files = this.files;
	const fileList = Object.entries(files).map(([_,file]) => {
		const preview = window.URL.createObjectURL(file);
		file.preview = preview;
		// 需要在合适的实际进行销毁,否则只有在页面卸载的时候才会自动卸载.
		// window.URL.revokeObjectURL(preview);
		return file;
	});
	
	/* 
	*  file中的preview存的就是可以预览使用url
	*/
	console.log(fileList);
},false);

三、拖拽上传

// 此处定义一个drop容器(省略),并取到该元素;
const dropBox = document.querySelector("#drop");
dropBox.addEventListener("dragenter",dragEnter,false);
dropBox.addEventListener("dragover",dragOver,false);
dropBox.addEventListener("drop",drop,false);

function dragEnter(e){
	e.stopPropagation();
	e.preventDefault();
}

function dragOver(e){
	e.stopPropagation();
	e.preventDefault();
}

function drop(e){
	// 当文件拖拽到dropBox区域时,可以在该事件取到files
	const files = e.dataTransfer.files;
}

  • 9
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你可以使用Dropzone.js的`addedfile`事件来处理上传文件后的预览和添加放大预览按钮的功能。以下是示例代码: ```javascript Dropzone.options.myDropzone = { paramName: "file", maxFilesize: 5, // 设置文件最大上传大小,单位MB dictDefaultMessage: "拖拽文件到此处上传", accept: function(file, done) { // 验证文件类型和大小,可以根据需求进行修改 if (file.type != "image/jpeg" && file.type != "image/png") { done("只支持上传jpg和png格式的图片"); } else if (file.size > 5 * 1024 * 1024) { done("文件大小不能超过5MB"); } else { done(); } }, init: function() { var dz = this; // 处理上传文件后的预览和添加放大预览按钮的功能 dz.on("addedfile", function(file) { var reader = new FileReader(); reader.onload = function(e) { var img = $('<img>').attr('src', e.target.result); var previewDiv = $('<div>').addClass('preview').append(img); var zoomBtn = $('<button>').addClass('zoom-btn').text('放大预览'); previewDiv.append(zoomBtn); $(file.previewElement).append(previewDiv); // 处理放大预览按钮的点击事件 zoomBtn.on('click', function() { var url = e.target.result; window.open(url, '_blank'); }); } reader.readAsDataURL(file); }); } }; ``` 上面的代码中,我们使用了`addedfile`事件来处理上传文件后的预览和添加放大预览按钮的功能。在每个文件预览元素中,我们添加了一个包含图片和放大预览按钮的`<div>`元素,并使用jQuery来操作DOM。在放大预览按钮的点击事件中,我们使用`window.open()`方法在新窗口中打开图片。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值