FileReader與URL.createObjectURL實現圖片、視頻上傳預覽

之前做圖片、視頻上傳預覽常用的方案是先把文件上傳到服務器,等服務器返回文件的地址后,再把該地址字符串賦給img或video的src屬性,這才實現所謂的文件預覽。實際上這只是文件“上傳后再預覽”,這既浪費了用戶的時間,也浪費了不可輕視的流量。

最近上網查資料才知道其實可以很輕松地實現“上傳前預覽”。實現方法有兩種:FileReader和URL.createObjectURL。

關于FileReader的講解可以看這里

關于URL.createObjectURL方法的講解和應用可以看這里

?IE10+

直接上代碼:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>preview</title><style>* {box-sizing: border-box;}.section {margin: 20px auto;width: 500px;border: 1px solid #666;text-align: center;}.preview {width: 100%;margin-top: 10px;padding: 10px;min-height: 100px;background-color: #999;}.preview img,.preview video {width: 100%;}</style><script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>
</head>
<body><div class="section"><p>方案1-FileReader</p><input class="upload" type="file" onchange=onUpload1(this.files[0])><div class="preview preview1"></div></div><div class="section"><p>方案2-createObjectURL</p><input class="upload" type="file" onchange=onUpload2(this.files[0])><div class="preview preview2"></div></div><script>// 方式一:FileReaderfunction onUpload1 (file) {var fr = new FileReader();fr.readAsDataURL(file);  // 將文件讀取為Data URLfr.onload = function(e) {var result = e.target.result;if (/image/g.test(file.type)) {var img = $('<img src="' + result + '">');$('.preview1').html('').append(img);} else if (/video/g.test(file.type)) {var vidoe = $('<video controls src="' + result + '">');$('.preview1').html('').append(vidoe);}}}// 方式二:createObjectURL(推薦)function onUpload2 (file) {var blob = new Blob([file]), // 文件轉化成二進制文件url = URL.createObjectURL(blob); //轉化成url// 或者直接:var url = window.URL.createObjectURL(file);if (/image/g.test(file.type)) {var img = $('<img src="' + url + '">');img[0].onload = function(e) {URL.revokeObjectURL(this.src);  // 釋放createObjectURL創建的對象}$('.preview2').html('').append(img);} else if (/video/g.test(file.type)) {var video = $('<video controls src="' + url + '">');$('.preview2').html('').append(video);video[0].onload = function(e) {URL.revokeObjectURL(this.src);  // 釋放createObjectURL創建的對象}}}</script>
</body>
</html>

一個視頻編碼成dataUrl放到內存瀏覽器肯定崩潰,用createObjectURL生成的url應該是指向硬盤中的視頻而不用加載到內存

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java開發合同相關

【點我-這里送書】 本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(…

集合的分類

Python內建的集合類&#xff0c;有有序和無序之分&#xff0c;還有可修改和不可修改之分。 1 有序和無序 有序是說某數據集合中的每個元素都有一個位置信息&#xff0c;通常用index表示&#xff0c;可以借助這種集合類型名和位置信息訪問集合里的某元素值&#xff0c;在Pytho…

【開源】基于Vue.js的用戶畫像活動推薦系統

項目編號&#xff1a; S 061 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S061&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S061&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 興趣標簽模塊2.3 活…

[Android]使用Git將項目提交到GitHub

如果你的Mac還沒有安裝Git&#xff0c;你可以通過Homebrew來安裝它&#xff1a; brew install git 方式一&#xff1a;終端管理 1.創建本地Git倉庫 在項目的根目錄下&#xff0c;打開終端&#xff08;Terminal&#xff09;并執行以下命令來初始化一個新的Git倉庫&#xff1…

vue3-組件傳參及計算屬性

?&#x1f308;個人主頁&#xff1a;前端青山 &#x1f525;系列專欄&#xff1a;Vue篇 &#x1f516;人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來vue篇專欄內容:vue3-組件傳參及計算屬性 目錄 vue3中的組件傳參 1、父傳子 2、子傳父 toRef 與 toRefs vue3中…

數據結構 查找基本概念

敬請期待。。。 1. 適用于折半查找的表的存儲方式及元素排列要求為&#xff08;順序方式存儲&#xff0c;元素有序 &#xff09;。 2. 有一個按元素值排好序的順序表(長度大于2)&#xff0c;分別用順序查找和折半查找與給定值相等的元素&#xff0c;比較次數分別是s和b&am…

拼接合并yuv序列轉成mp4

ffmpeg需要用支持libx264的版本&#xff0c;如果需要&#xff0c;可以從這個網站下載編譯支持libx264\x265的ffmpeg https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1-essentials_build.7z #-*- coding:utf-8-*- import osif __name__ "__main__":# 1 輸入…

實例講解:在3dMax中如何使用python腳本?

如果你是Python或Maxscript的新手&#xff0c;你現在可以跟著這篇文章開始做一些代碼了&#xff0c;本文將讓我們從非常基本的東西開始學習。 如何在3dmax中獲取選定的節點并打印出它們的名稱&#xff1f;所有場景對象如何&#xff1f;我們直接看代碼&#xff1a; import MaxP…

Word/PPT/PDF怎么免費轉為JPG圖片?

1、打開金鳴表格文字識別網站。 2、點擊導航條上的“軟件下載” 3、安裝并打開金鳴表格文字識別軟件。 4、點擊頂部導航欄的“文件轉圖片”。 5、選擇需要轉換成圖片的文件&#xff08;支持Word/PPT/PDF&#xff09;. 6、點“打開”程序將自動分頁轉換為圖片。

【論文閱讀筆記】Smil: Multimodal learning with severely missing modality

Ma M, Ren J, Zhao L, et al. Smil: Multimodal learning with severely missing modality[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(3): 2302-2310.[開源] 本文的核心思想是探討和解決多模態學習中的一個重要問題&#xff1a;在訓練和測…

【dart線程之怎么處理異步和順序異步任務隊列】

dart線程之怎么處理異步和順序異步任務隊列 單線程的dart怎么處理異步任務的&#xff1f; 事件循環模型就是實現異步處理任務的核心。 關于阻塞式調用和非阻塞式調用的概念 阻塞和非阻塞關注的是程序在等待調用結果&#xff08;消息、返回值&#xff09;時的狀態阻塞式調用…

JS中的OOP

JS中的OOP OOP 為我們解決了什么問題&#xff1f;想象一下&#xff0c;我們希望為教師提供一個平臺&#xff0c;每位注冊的教師都可以提交分數&#xff0c;并為課程分配作業和其他內容。 如果有一個地方&#xff08;在本例中是一個對象&#xff09;&#xff0c;可以訪問所有教…

Python編寫的爬蟲為什么受歡迎?

每每回想起我當初學習python爬蟲的經歷&#xff0c;當初遇到的各種困難險阻至今都歷歷在目。即便當初道阻且長&#xff0c;窮且益堅&#xff0c;我也從來沒有想過要放棄。今天我將以我個人經歷&#xff0c;和大家聊一聊有關Python語音編寫的爬蟲的事情。談一談為什么最近幾年py…

C#中的事件(委托的發布和訂閱、事件的發布和訂閱、EventHandler類、Windows事件)

目錄 一、委托的發布和訂閱 1.訂閱操作符號“"和取消訂閱操作符號“-” 2.示例源碼 二、事件的發布和訂閱 三、EventHandler類 四、Windows事件 C#中的事件是指某個類的對象在運行過程中遇到的一些特定事情&#xff0c;而這些特定的事情有必要通知給這個對象的使用者…

【海德教育】河北初級職稱報名條件:

河北助理工程師 學歷要求 大專畢業后滿3年&#xff0c;工程類專業 本科畢業后滿1年 &#xff0c;工程類專業 非工程類專業&#xff0c;年限增加2年即可。

多線程,線程池,線程的創建,線程池的參數

文章目錄 多線程-1 高并發〇、使用多線程的場景1. 為什么使用多線程 1. 線程概述1.1 線程和進程1.2 并發和并行1.3 多線程的優勢1.4 程序運行原理1.5 主線程 1.6 線程的 6 種狀態2. 線程的創建和啟動2.1 Thread類2.2創建線程有哪幾種方法2.2.1 繼承**Thread**類&#xff0c;重寫…

centos7 安裝docker

1.卸載舊版本&#xff0c;不管裝沒裝過&#xff0c;執行一下&#xff0c;防止版本沖突 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2. yum安裝gcc相關 以及 安…

electron27-react-mateos:基于electron+react18仿matePad桌面系統

基于Electron27React18ArcoDesign搭建桌面版OS管理系統。 electron-react-mateos 基于最新前端跨端技術棧electron27.xreact18arco-designzustand4sortablejs構建的一款仿制matePad界面多層級路由管理OS系統。 ElectronReactOS支持桌面多路由配置&#xff0c;新開窗口彈窗開啟路…

YB4051系列設備是高度集成的 Li-lon 和 Li-Pol 線性充電器,針對便攜式應用的小容量電池。

YB4051H 300mA 單電池鋰離子電池充電器0.1 mA 終端&#xff0c;45nA 電池漏電流 概述&#xff1a; YB4051系列設備是高度集成的 Li-lon 和 Li-Pol 線性充電器&#xff0c;針對便攜式應用的小容量電池。它是一個完整的恒流/恒壓線性充電器。不需要外部感應電阻&#xff0c;由于…

51單片機利用I/O口高阻狀態實現觸摸控制LED燈

51單片機利用I/O口高阻狀態實現觸摸控制LED燈 1.概述 這篇文章介紹使用I/O口的高阻狀態實現一個觸摸控制LED燈亮滅的實驗。該實驗通過手觸摸P3.7引腳&#xff0c;改變電平信號控制燈的亮滅。 2.實驗過程 2.1.實驗材料 名稱型號數量單片機STC12C20521LED彩燈無1晶振12MHZ1電…