html之file标签 --- 图片上传前预览 -- FileReader

 记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能。当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了其他方式来实现了这个功能。

  今天无意发现了一个知识点,用html的file标签就能实现图片上传前预览,感觉很棒,记录一下!就是通过file标签和js的FileReader接口,把选择的图片文件调用readAsDataURL方法,把图片数据转成base64字符串形式显示在页面上。

1、闲话少说,测试一下,图片上传前预览(选择图片):

  

 实现代码:

复制代码
<div style="border:2px dashed red;"><p>图片上传前预览:<input type="file" id="xdaTanFileImg" οnchange="xmTanUploadImg(this)" accept="image/*"/><input type="button" value="隐藏图片" οnclick="document.getElementById('xmTanImg').style.display = 'none';"/><input type="button" value="显示图片" οnclick="document.getElementById('xmTanImg').style.display = 'block';"/></p><img id="xmTanImg"/><div id="xmTanDiv"></div></div><hr /><script type="text/javascript">            //判断浏览器是否支持FileReader接口if (typeof FileReader == 'undefined') {document.getElementById("xmTanDiv").InnerHTML = "<h1>当前浏览器不支持FileReader接口</h1>";//使选择控件不可操作document.getElementById("xdaTanFileImg").setAttribute("disabled", "disabled");}//选择图片,马上预览function xmTanUploadImg(obj) {var file = obj.files[0];console.log(obj);console.log(file);console.log("file.size = " + file.size);  //file.size 单位为bytevar reader = new FileReader();//读取文件过程方法reader.onloadstart = function (e) {console.log("开始读取....");}reader.onprogress = function (e) {console.log("正在读取中....");}reader.onabort = function (e) {console.log("中断读取....");}reader.onerror = function (e) {console.log("读取异常....");}reader.onload = function (e) {console.log("成功读取....");var img = document.getElementById("xmTanImg");img.src = e.target.result;//或者 img.src = this.result;  //e.target == this}reader.readAsDataURL(file)}</script>
复制代码

 

-------------------------------  end  -----------------------------

 

2、另外 FileReader除了有函数readAsDataURL,另外还有另外两个函数readAsBinaryString 和 readAsText,分别可以将选择的文件读取成二进制和文本格式 

测试一下,选择文本(txt、cs、html、js、css、xml),读取成二进制或者文本:

选择文件:     

 实现代码:

复制代码
<script type="text/javascript">//判断浏览器是否支持FileReader接口if (typeof FileReader == 'undefined') {document.getElementById("xmTanContentDiv").InnerHTML = "<p>当前浏览器不支持FileReader接口!</p>";document.getElementById("xmTanFile").setAttribute("disabled", "disabled");}//选择文件function xmTanUploadFile(obj){if (obj.files.length < 1) return;var file = obj.files[0];if (file.size > 1024 * 1024) {alert("文件大于1M, 太大了,小点吧!");obj.value = "";return;}}//读取文件为二进制function readAsBinaryString() {var obj = document.getElementById("xmTanFile");if (obj.files.length < 1) return;var file = obj.files[0];var reader = new FileReader();//将文件以二进制形式读入页面reader.readAsBinaryString(file);reader.onload = function (f) {document.getElementById("xmTanContentDiv").innerHTML = this.result;}}//读取文件为文本function readAsText() {var obj = document.getElementById("xmTanFile");if (obj.files.length < 1) return;var file = obj.files[0];var reader = new FileReader();//将文件以文本形式读入页面reader.readAsText(file);reader.onload = function (f) {document.getElementById("xmTanContentDiv").innerHTML = this.result;}}</script><div style="border: 2px dashed red; padding: 20px 0px;"><label>选择文件:</label><input type="file" id="xmTanFile" accept=".html,.js,.css,.txt,.cs,.xml" οnchange="xmTanUploadFile(this)"/><input type="button" value="读取成二进制数据" οnclick="readAsBinaryString()" /><input type="button" value="读取成文本数据" οnclick="readAsText()" /><input type="button" value="隐藏读取内容" οnclick="document.getElementById('xmTanContentDiv').style.display = 'none';"/><input type="button" value="显示读取内容" οnclick="document.getElementById('xmTanContentDiv').style.display = 'block';"/><div id="xmTanContentDiv"></div></div>
复制代码

 

 ---------------------------

3、----------- a标签之download属性 -------------

   设置a标签href为图片链接,再设置download属性,点此链接可以直接下载图片

  

点此下载

实现代码:

复制代码
<div style="text-align:center; padding: 5px 20px;width: 70%;"><img id="xmTanShowImg" src=""/><h1><a href="javascript:void()" download="girl.jpg" id="xmTanDownload">点此下载</a></h1></div><script type="text/javascript">//图片转成base64位字符串数据var imgData = "data:image/png;base64,.........";//或直接设置图片链接: var imgData = "images/picture.png";document.getElementById("xmTanShowImg").setAttribute("src", imgData);  //给图片标签设置srcdocument.getElementById("xmTanDownload").setAttribute("href", imgData); //给a标签设置href</script>
复制代码

转载于:https://www.cnblogs.com/1030351096zzz/p/6649667.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio3.0简介

Android Studio 3.0.0 Android Studio 3.0.0 (2017年10月)是一个主要版本&#xff0c;包括各种新功能和改进 Android插件的Gradle 3.0.0 • 支持Android 8.0 • 支持Java 8库和Java 8语言功能&#xff08;没有Jack编译器&#xff09; • 支持Android测试支持库1.0&#xff08;A…

嵌入式linux面试题解析(二)——C语言部分三

嵌入式linux面试题解析&#xff08;二&#xff09;——C语言部分三1、下面的程序会出现什么结果#include <stdio.h>#include <stdlib.h>#include <string.h>void getmemory(char *p){ p(char *) malloc(100); strcpy(p,”hello world”);}int main( ){…

什么是JavaBean、Bean? 什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?

前言&#xff1a; 在Java开发中经常遇到这些概念问题&#xff0c;有的可能理解混淆&#xff0c;有的可能理解不到位&#xff0c;特此花了很多时间理顺了这些概念。不过有些概念实际开发中并没有使用到&#xff0c;可能理解还不够准确&#xff0c;只能靠后续不断纠正了。 1、什么…

【GlobalMapper精品教程】037:构建泰森多边形(Thiessen Polygon)实例精解

泰森多边形是进行快速插值和分析地理实体影响区域的常用工具。例如,用离散点的性质描述多边形区域的性质,用离散点的数据计算泰森多边形区域的数据。泰森多边形可用于定性分析、统计分析和临近分析等。 文章目录 一、泰森多边形的概念二、泰森多边形的特点三、泰森多边形构建…

WPF 实现 Gitee 泡泡菜单「完」

WPF 实现 Gitee 泡泡菜单「完」气泡菜单「完」作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;需要实现泡泡菜单需…

BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]

4516: [Sdoi2016]生成魔咒 题意&#xff1a;询问一个字符串每个前缀有多少不同的子串 做了一下SDOI2016R1D2&#xff0c;题好水啊随便AK 强行开map上SAM 每个状态的贡献就是\(Max(s)-Min(s)1\) 插入的时候维护一下就行了 #include <iostream> #include <cstdio> #i…

Fiddler抓包5-接口测试(Composer)

前言 Fiddler最大的优势在于抓包&#xff0c;我们大部分使用的功能也在抓包的功能上&#xff0c;fiddler做接口测试也是非常方便的。 对应没有接口测试文档的时候&#xff0c;可以直接抓完包后&#xff0c;copy请求参数&#xff0c;修改下就可以了。 一、Composer简介 点开右侧…

【GlobalMapper精品教程】038:模拟水位上升(洪水淹没分析)案例教程

基于数字高程模型 ( DEM )格网模型,实现给定水深情况下洪水淹没区的计算模型,讨论洪水淹没演进过程可视化实现的关键技术,以三维可视化方式,动态而形象地模拟在指定洪水水位下的洪水淹没演进过程。 文章目录 一、洪水淹没效果二、洪水淹没实现三、查询淹没区域面积参考教程…

【.NET6+Avalonia】开发支持跨平台的仿WPF应用程序以及基于ubuntu系统的演示

前言&#xff1a;随着跨平台越来越流行&#xff0c;.net core支持跨平台至今也有好几年的光景了。但是目前基于.net的跨平台&#xff0c;大多数还是在使用B/S架构的跨平台上&#xff1b;至于C/S架构&#xff0c;大部分人可能会选择QT进行开发&#xff0c;或者很早之前还有一款M…

SOA架构和MSA架构之间的关系

目录 一、传统架构&#xff1a;简单单体模式 二、分布式架构&#xff1a;面向服务架构&#xff08;SOA&#xff09; 1、服务与SOA 2、SOA战略 3、SOA的两大基石&#xff1a;RPC和MQ 三、分布式架构&#xff1a;微服务架构&#xff08;MSA&#xff09; 什么是微服务 微服…

Linux系统文件与目录权限管理

Linux文件目录权限管理 一、Linux文件属性及权限 1、Linux文件及目录权限及属性说明 &#xff08;1&#xff09;权限及属性说明 &#xff08;2&#xff09;文件权限说明 三种权限说明&#xff1a;r 读 read w 写 write x 执行 excute 2、修改文件属主及属组 &#xff08;1&am…

一个文本分词程序

WordMap类从分词库中读入分词 将分词存入unordered_map<std::string, int> 中 #pragma once #include<istream> #include<unordered_map> #include<string> #include<ctime> class WordMap { public:WordMap(const std::string& filename);…

scala学习手记28 - Execute Around模式

我们访问资源需要关注对资源的锁定、对资源的申请和释放&#xff0c;还有考虑可能遇到的各种异常。这些事项本身与代码的逻辑操作无关&#xff0c;但我们不能遗漏。也就是说进入方法时获取资源&#xff0c;退出方法时释放资源。这种处理就进入了Execute Around模式的范畴。 在s…

【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例...

前言&#xff1a;如题。直接上手撸&#xff0c;附带各种截图&#xff0c;就不做介绍了。1、influxDB的官网下载地址 https://portal.influxdata.com/downloads/打开以后&#xff0c;如下图所示&#xff0c;可以选择版本号&#xff0c;以及平台。此处咱们选择windows平台。不过…

官宣 微软跨平台 UI 框架 .NET MAUI 6 正式发布

微软宣布 .NET MAUI 已正式 GA。 .NET MAUI (.NET Multi-platform App UI) 是一个跨平台 UI 框架&#xff08;前身是 Xamarin.Forms&#xff09;&#xff0c;用于通过 C# 和 XAML 创建原生移动和桌面应用。基于 .NET MAUI&#xff0c;开发者可在单个共享代码库中创建同时支持 A…

92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m 2 and n 4, return 1->4->3->2->5->NULL. Note:Given m, n satisfy the following condition:1 ≤ m ≤ n ≤ lengt…

Reset

在常用的代码中&#xff0c;我们使用AddForm.form.reset();或者AddForm.getForm().reset();来将FormPanel重置。 但是当页面增加和修改公用一个formpanel时&#xff0c;当先点击修改时&#xff0c;窗体修改显示出数据&#xff0c;关闭窗体后&#xff08;window.hide()&#xff…

《.NET物联网从零开始》系列

近日搞硬件网关时&#xff0c;那些残存的数电、模电和通信原理的记忆时常在脑海中萦绕&#xff1b;想起来多年前看张高兴的博客学会了.netcore树莓派进行物联网开发。使用dragonboard(龙板)搭载windows 10 iot系统&#xff0c;配合光电传感器和rfid实现了一个项目原型。碰巧逛g…

设计好接口的 36 个锦囊(原则)

目录 设计好接口的 36 个锦囊 | 接口参数校验 | 修改老接口时&#xff0c;注意接口的兼容性 | 设计接口时&#xff0c;充分考虑接口的可扩展性 | 接口考虑是否需要防重处理 | 重点接口&#xff0c;考虑线程池隔离 | 调用第三方接口要考虑异常和超时处理 | 接口实现考虑…

嵌入式第11次实验

嵌入式软件设计第11次实验报告 学号&#xff1a;140201236 姓名&#xff1a;沈樟伟 组别&#xff1a;第2组 实验地点&#xff1a;D19 一、实验目的&#xff1a; 1、了解短信AT指令的使用方法。 2、掌握使用短信AT指令驱动SIM900A发送和接收短信的方…