成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript異步圖像上傳

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

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

介紹

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

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

 

 

JavaScript異步圖像上傳

 

背景

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

使用的代碼

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

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

JavaScript異步圖像上傳

 

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

步驟2:生成Base64縮略圖

JavaScript異步圖像上傳

 

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

步驟3:使用Ajax上傳文件

JavaScript異步圖像上傳  
JavaScript異步圖像上傳  

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

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

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

  1. <!DOCTYPE html>  
  2. <html>  
  3. <body>  
  4. <input type="file" id="imageFileInput" accept=".jpg, .jpeg, .png" />  
  5. <img src="//:0" id="preview" />  
  6. <script>  
  7. document.getElementById('imageFileInput').addEventListener('change'function() {  
  8. var img = this.files[0];  
  9. uploadImage(img, '/image/upload'function(url) {  
  10. // Image upload to server response  
  11. // Show the image using setImageUrl(URL)  
  12. });  
  13. getBase64ImageUrl(img, function(base64ImageUrl) {  
  14. var height = 100,  
  15. width = 100;  
  16. getThumbnail(base64ImageUrl, height, width, function(base64ThumbnailUrl) {  
  17. setImageUrl(base64ThumbnailUrl);  
  18. })  
  19. });  
  20. }, false);  
  21. function setImageUrl(url) {  
  22. document.getElementById('preview').setAttribute('src', url);  
  23. };  
  24. function uploadImage(img, url, callback) {  
  25. var xhr = new XMLHttpRequest();  
  26. var fd = new FormData();  
  27. xhr.open("POST", url, true);  
  28. xhr.onreadystatechange = function() {  
  29. if (xhr.readyState == 4 && xhr.status == 200) { 
  30.  callback && callback(xhr.responseText);  
  31.  
  32. };  
  33. fd.append("upload_image", img);  
  34. xhr.send(fd);  
  35. };  
  36. function getBase64ImageUrl(img, callback) {  
  37. var reader = new FileReader();  
  38. reader.readAsDataURL(img);  
  39. reader.onload = function() {  
  40. callback && callback(reader.result);  
  41. };  
  42. reader.onerror = function(error) {  
  43. console.log('Error: ', error);  
  44. };  
  45. };  
  46. function getThumbnail(base64ImageUrl, height, width, callback) {  
  47. var canvas = document.createElement('canvas');  
  48. var ctx = canvas.getContext("2d");  
  49. var image = new Image();  
  50. image.src = base64ImageUrl;  
  51. image.onload = function() {  
  52. ctx.drawImage(image, 0, 0, width, height); 
  53. callback && callback(canvas.toDataURL());  
  54. };  
  55.  
  56. </script>  
  57. </body>  
  58. </html>  

也可以使用HTML5 Canvas API生成圖像縮略圖。如果您的用例涉及立即在web應用程序中顯示圖像的縮略圖,如果在服務器中異步生成縮略圖,仍然可以通過使用JavaScript在客戶端中調整圖像的大小來直接顯示縮略圖。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2020-10-15 13:29:57

javascript

2015-04-22 10:50:18

JavascriptJavascript異

2014-05-23 10:12:20

Javascript異步編程

2017-07-13 12:12:19

前端JavaScript異步編程

2016-09-07 20:43:36

Javascript異步編程

2010-02-22 17:58:06

WCF異步上傳

2021-06-02 09:01:19

JavaScript 前端異步編程

2011-11-11 15:47:22

JavaScript

2017-05-11 20:20:59

JavascriptPromiseWeb

2020-03-23 11:28:56

PythonJavaScript技術

2017-07-06 17:39:53

JavaScript開發程序員

2018-11-08 15:30:04

JavaScriptES6異步

2017-08-28 15:21:29

異步處理回調函數異步編程

2020-04-07 00:10:16

javascrip語言異步

2021-12-10 07:47:30

Javascript異步編程

2010-10-08 10:03:52

JavaScript圖像

2023-12-04 13:22:00

JavaScript異步編程

2011-11-10 10:23:56

Jscex

2021-06-06 19:51:07

JavaScript異步編程

2009-07-01 13:58:00

JavaScript異
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 找个黄色片 | 久久av在线播放 | 在线观看国产视频 | 精品国产一区二区三区观看不卡 | 久久狼人天堂 | 亚洲第一黄色网 | 中文字幕亚洲一区二区三区 | 亚洲高清av在线 | 久久新视频| 最新中文字幕 | 日韩www| 国产在线永久免费 | 亚洲精品68久久久一区 | av资源网站 | 福利社午夜影院 | 亚洲免费在线观看 | 久久综合国产精品 | 又黄又色 | 午夜精品一区二区三区在线观看 | 久热中文字幕 | 一级黄色毛片免费 | 精品人伦一区二区三区蜜桃网站 | 久久久久网站 | 亚洲精品电影网在线观看 | 人操人免费视频 | 久久中文字幕一区 | 黄色网址免费在线观看 | 精品国产99 | 国产一区二区久久 | 国产美女一区 | 欧美另类视频 | 中文字幕不卡视频在线观看 | 日韩av视屏| 国产视频精品在线 | 天天草天天射 | a级片在线观看 | 欧美涩涩网 | 中文字幕一区二区三区精彩视频 | 中文在线一区 | 欧美一级二级在线观看 | 午夜影院毛片 |