图片下载/预览简单实现 , 以及FileReader转换文件的方法

根据路径下载

思路:

  1. 通过new Image()对象, src赋予路径
  2. 监听将Image对象onload事件, 画在canvas上,
  3. 再使用canvas.toDataURL转换为base64格式(可设置图片类型和图片质量),
  4. 构建a标签, 点击a标签下载(a标签需要设置download属性)
	// 新建canvas对象, 取到2d画布
	var canvas = document.getElementsByTagName('canvas')[0]
	var    ctx = canvas.getContext('2d')
	// 新建图片
	var Img = new Image()
	Img.src = "a.png"
	// 转换为 base64
	Img.onload = function () {
	    canvas.width = Img.width
	    canvas.height = Img.height
	    ctx.drawImage(Img, 0, 0, canvas.width, canvas.height)
	    var base = canvas.toDataURL('image/png')
	    var $a = document.createElement('a')
	    $a.setAttribute('href', base)
	    $a.setAttribute('download', 'downloadImg')
	    document.getElementById('download').click()
	}
上传预览后下载

思路:

  1. 通过input标签, type=file
  2. 监听change事件, 通过事件对象拿到图片的file对象(e.target.files)
  3. new FileReader读取文件
  4. 调用FileReaderreadAsDataURL方法
  5. FileReader对象的onload事件拿到转换后的base64格式
  6. 赋予图片标签src预览
  7. 构建a标签, 点击a标签下载

下面随便写一下

	<img id="img" src="" alt="">
	<input id="file-select" type="file" placeholder="请选择图片">
	<button>下载</button>
	<script src="a.js"></script>
	var $input = document.getElementById('file-select')
	var src = ''
	$input.addEventListener('change', function (e) {
	    var reader = new FileReader();
	    reader.readAsDataURL(e.target.files[0]);
	    reader.onload = function (ev) {
	        var imgEle = document.getElementById('img')
	        imgEle.setAttribute('width', '200')
	        imgEle.setAttribute('height', '100')
	        imgEle.src = ev.target.result
	        src = imgEle.src
	    }
	})
	
	function download() {
	    var el = document.createElement('a')
	    el.setAttribute('href', src)
	    el.setAttribute('download', 'test')
	    el.click()
	}
	
	var btn = document.getElementsByTagName('button')[0]
	btn.addEventListener('click', download)

粗糙的效果:
在这里插入图片描述

FileReader

FileReader 接收 File 或 Blob 对象

   fr.readAsDataURL(); //result属性中将包含一个data:URL格式的字符串, 文本文档也可以转换为 base64
   fr.readAsBinaryString() //result属性中将包含所读取文件的原始二进制数据
   fr.readAsText() //result属性中将包含一个字符串以表示所读取的文件内容
   fr.readAsArrayBuffer() //result 属性中保存的将是被读取文件的 
(function(){
    var dataUrl;
    var file = document.querySelector('input.upload').files[0];
    var fr = new FileReader();
    fr.readAsDataURL(); //result属性中将包含一个data: URL格式的字符串, 文本文档也可以转换为 base64
    //fr.readAsBinaryString() //result属性中将包含所读取文件的原始二进制数据
    //fr.readAsText() //result属性中将包含一个字符串以表示所读取的文件内容
    //fr.readAsArrayBuffer() //result 属性中保存的将是被读取文件的 
    fr.onload(function(){ //文件读取成功回调
        dataUrl = fr.result;  //result属性为data:URL格式,与读取方式有关
        document.querySelector('img.previewImg').src = dataUrl 
    });
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用HTML5的File API来实现文件预览和下载。下面是一个简单的示例: ```html <input type="file" id="file-input"> <button id="preview-btn">预览</button> <button id="download-btn">下载</button> <script> const fileInput = document.getElementById('file-input'); const previewBtn = document.getElementById('preview-btn'); const downloadBtn = document.getElementById('download-btn'); // 预览文件 previewBtn.addEventListener('click', () => { const file = fileInput.files[0]; if (file) { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => { const preview = document.createElement('img'); preview.src = reader.result; document.body.appendChild(preview); }; } }); // 下载文件 downloadBtn.addEventListener('click', () => { const file = fileInput.files[0]; if (file) { const url = URL.createObjectURL(file); const link = document.createElement('a'); link.href = url; link.download = file.name; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); } }); </script> ``` 该示例中,我们通过`<input type="file">`元素来选择要操作的文件。点击“预览”按钮时,我们使用`FileReader`对象来读取文件数据,并将其转换为Data URL格式,然后在页面上创建一个`<img>`元素来显示该文件预览。点击“下载”按钮时,我们使用`URL.createObjectURL`方法来生成一个临时的URL,然后创建一个`<a>`元素来指向该URL并设置`download`属性来指定文件名。最后点击该链接来触发下载,完成后需要使用`URL.revokeObjectURL`方法来释放该URL。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值