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.pswp.cn/news/284085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284085.shtml
英文地址,請注明出處:http://en.pswp.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發送和接收短信的方…