原生js实现文件下载

文件下载是前端开发常见的开发需求,本文以vue框架为例介绍两种下载方式,网络文件下载和本地文件下载,具体实现如下,如需体验,可点击底部demo链接。


一、网络文件下载

<div @click="clickBtn">文件下载</div>

methods: {
   clickBtn() {
		this.fileDownload(url, filename) // 传入文件url和文件名称
	},
	// 文件下载函数
	fileDownload(url, filename) {
		function getBlob(url, cb) {
			var xhr = new XMLHttpRequest();
			xhr.open('GET', url, true);
			xhr.responseType = 'blob';
			xhr.onload = function () {
				if (xhr.status === 200) {
					cb(xhr.response);
				}
			};
			xhr.send();
		}
		function saveAs(blob, filename) {
			if (window.navigator.msSaveOrOpenBlob) {
				navigator.msSaveBlob(blob, filename);
				return
			}
			var link = document.createElement('a');
			var body = document.querySelector('body');
			link.href = window.URL.createObjectURL(blob);
			link.download = filename;
			link.style.display = 'none';
			body.appendChild(link);
			link.click();
			body.removeChild(link);
			window.URL.revokeObjectURL(link.href);
		}
		getBlob(url, function (blob) {
			saveAs(blob, filename);
		})
	}
}

示例


二、本地文件下载

<div @click="clickBtn">文件下载</div>


clickBtn() {
    // 01.jpg文件存放在public目录下
	this.fileDownload('./01.jpg', 'filename')
},
fileDownload(link, fileName) {
	let img = new Image()
	img.setAttribute('crossOrigin', 'Anonymous')
	img.onload = function(){
		let canvas = document.createElement('canvas')
		let context = canvas.getContext('2d')
		canvas.width = img.width
		canvas.height = img.height
		context.drawImage(img, 0, 0, img.width, img.height)
		let url = canvas.toDataURL('images/png')
		let a = document.createElement('a')
		let event = new MouseEvent('click')
		a.download = fileName || 'default.png'
		a.href = url
		a.dispatchEvent(event)
	}
	img.src = link + '?v=' + Date.now()
}

三、体验链接

http://zk-web-object.oss-cn-qingdao.aliyuncs.com/wxy/demo/index.html

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用原生 JavaScript 实现文件上传,以下是一个基本的示例: HTML 代码: ```html <input type="file" id="file-upload" /> <button onclick="uploadFile()">上传文件</button> ``` JavaScript 代码: ```javascript function uploadFile() { var input = document.getElementById('file-upload'); var file = input.files[0]; var formData = new FormData(); formData.append('file', file); var request = new XMLHttpRequest(); request.open('POST', 'your-upload-url', true); request.onreadystatechange = function() { if (request.readyState === XMLHttpRequest.DONE && request.status === 200) { // 文件上传成功的处理逻辑 console.log(request.responseText); } }; request.send(formData); } ``` 上述代码中,我们首先获取了文件上传表单元素和文件对象。然后,创建一个 FormData 对象,并将文件对象添加到其中。接下来,创建一个 XMLHttpRequest 对象,并使用 `open` 方法指定上传的 URL、请求方式等参数。 在 `onreadystatechange` 事件中,我们检查请求的状态是否为完成状态(`XMLHttpRequest.DONE`)且响应状态码是否为 200(表示成功)。如果满足条件,表示文件上传成功,可以在这里处理成功的逻辑。 最后,通过调用 `send` 方法发送请求,将文件上传到指定的 URL。请将 `'your-upload-url'` 替换为实际的上传地址。 注意:由于涉及到跨域请求,请确保上传地址的配置允许跨域请求。另外,此代码示例基于原生 JavaScript 实现,没有使用任何框架或库。如果你使用的是某个特定的框架或库,可能会有相应的上传方法或插件可用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值