国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實現異步圖像上傳功能

2019-11-19 13:30:08
字體:
來源:轉載
供稿:網友

當向服務器上傳圖像時,根據服務器操作的復雜性和服務器性能,需要幾秒鐘到幾分鐘的時間來完成。本文的重點是在圖像上傳至服務器時使用JavaScript立即顯示圖像。

介紹

當使用JavaScript將圖像上傳到服務器時,根據服務器操作的復雜性,可能需要幾秒到幾分鐘來完成操作。在某些情況下,即使圖像上傳成功,也需要花費更多的時間,這取決于服務器對圖像進行額外處理的能力。

本文展示了一種使用代碼示例立即顯示圖像的方法(使用圖像的Base64編碼版本),同時將其上載到服務器,而無需等待操作完成。這種方法的目的是提高web應用程序的用戶體驗,而不等待服務器做整個圖像的處理(例如,縮略圖生成、應用過濾器等)后,上傳成功,因為它可以在客戶端web應用程序上展示圖片。

 

背景

在使用AWS S3作為圖像存儲時,最初遇到了這個問題。圖像縮略圖的設置是使用AWS Lambda完成的,在使用web應用程序的JavaScript成功上傳圖像到S3之后,S3將異步觸發AWS Lambda函數,該函數將生成圖像的縮略圖并將其存儲在另一個S3中。盡管這是一個高度可伸縮和可靠的圖像縮略圖生成解決方案,但是web應用程序要等到生成縮略圖才能在應用程序的視圖中顯示它,這是不現實的。

使用的代碼

此代碼使用VanillaJS編寫,不使用任何第三方JavaScript庫,因此如果您使用任何第三方框架,您可以使用框架或庫提供的構造來調整概念并實現它。

步驟1:將圖像加載到瀏覽器

 

如圖所示在上面的例子中,有兩個HTML元素的例子。< img > DOM元素有顯示選中的圖像。<input> DOM元素為用戶選擇圖像文件。使用JavaScript文件API,可以聽改變事件處理程序和加載圖像訪問使用JavaScript。

步驟2:生成Base64縮略圖

 

使用JavaScript訪問圖像后,將其加載到HTML5 FileReader并轉換為Base64數據URL。然后使用Base64數據URL更新 DOM元素。

步驟3:使用Ajax上傳文件

使用Ajax,圖像上傳被啟動到服務器。使用JavaScript, HTML表單提交將異步觸發,具體的代碼將根據服務器實現而異,特別是在HTTP方法(例如,這里是POST)和URL方面。

如果服務器響應包含圖像URL,則可以使用它相應地更新 DOM元素,或者如果服務器維護了適當的圖像訪問路徑約定(例如,/images/),則可以使用它加載圖像。

步驟4:(可選)客戶端縮略圖生成

<!DOCTYPE html> <html> <body> <input type="file" id="imageFileInput" accept=".jpg, .jpeg, .png" /> <img src="http://:0" id="preview" /> <script> document.getElementById('imageFileInput').addEventListener('change', function() { var img = this.files[0]; uploadImage(img, '/image/upload', function(url) { // Image upload to server response // Show the image using setImageUrl(URL) }); getBase64ImageUrl(img, function(base64ImageUrl) { var height = 100, width = 100; getThumbnail(base64ImageUrl, height, width, function(base64ThumbnailUrl) { setImageUrl(base64ThumbnailUrl); }) }); }, false); function setImageUrl(url) { document.getElementById('preview').setAttribute('src', url); }; function uploadImage(img, url, callback) { var xhr = new XMLHttpRequest(); var fd = new FormData(); xhr.open("POST", url, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) {  callback && callback(xhr.responseText); } }; fd.append("upload_image", img); xhr.send(fd); }; function getBase64ImageUrl(img, callback) { var reader = new FileReader(); reader.readAsDataURL(img); reader.onload = function() { callback && callback(reader.result); }; reader.onerror = function(error) { console.log('Error: ', error); }; }; function getThumbnail(base64ImageUrl, height, width, callback) { var canvas = document.createElement('canvas'); var ctx = canvas.getContext("2d"); var image = new Image(); image.src = base64ImageUrl; image.onload = function() { ctx.drawImage(image, 0, 0, width, height); callback && callback(canvas.toDataURL()); }; } </script> </body> </html> 

總結

以上所述是小編給大家介紹的JavaScript實現異步圖像上傳功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙河市| 承德县| 芦溪县| 囊谦县| 赤水市| 柏乡县| 神农架林区| 永年县| 南江县| 镇赉县| 余姚市| 开阳县| 临洮县| 福泉市| 德令哈市| 新疆| 怀集县| 巴东县| 措美县| 广河县| 凭祥市| 嘉定区| 石柱| 长乐市| 什邡市| 永春县| 昆明市| 西畴县| 太保市| 兴安盟| 滕州市| 安阳县| 南漳县| 浏阳市| 朝阳县| 措美县| 西青区| 东平县| 筠连县| 汉中市| 五常市|