最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)異步圖像上傳功能

 更新時(shí)間:2018年07月12日 17:12:13   作者:程序你好  
這篇文章主要介紹了JavaScript實(shí)現(xiàn)異步圖像上傳功能,本文展示了一種使用代碼示例立即顯示圖像的方法(使用圖像的Base64編碼版本),同時(shí)將其上載到服務(wù)器,而無(wú)需等待操作完成。需要的朋友可以參考下

當(dāng)向服務(wù)器上傳圖像時(shí),根據(jù)服務(wù)器操作的復(fù)雜性和服務(wù)器性能,需要幾秒鐘到幾分鐘的時(shí)間來(lái)完成。本文的重點(diǎn)是在圖像上傳至服務(wù)器時(shí)使用JavaScript立即顯示圖像。

介紹

當(dāng)使用JavaScript將圖像上傳到服務(wù)器時(shí),根據(jù)服務(wù)器操作的復(fù)雜性,可能需要幾秒到幾分鐘來(lái)完成操作。在某些情況下,即使圖像上傳成功,也需要花費(fèi)更多的時(shí)間,這取決于服務(wù)器對(duì)圖像進(jìn)行額外處理的能力。

本文展示了一種使用代碼示例立即顯示圖像的方法(使用圖像的Base64編碼版本),同時(shí)將其上載到服務(wù)器,而無(wú)需等待操作完成。這種方法的目的是提高web應(yīng)用程序的用戶體驗(yàn),而不等待服務(wù)器做整個(gè)圖像的處理(例如,縮略圖生成、應(yīng)用過濾器等)后,上傳成功,因?yàn)樗梢栽诳蛻舳藈eb應(yīng)用程序上展示圖片。

 

背景

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

使用的代碼

此代碼使用VanillaJS編寫,不使用任何第三方JavaScript庫(kù),因此如果您使用任何第三方框架,您可以使用框架或庫(kù)提供的構(gòu)造來(lái)調(diào)整概念并實(shí)現(xiàn)它。

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

 

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

步驟2:生成Base64縮略圖

 

使用JavaScript訪問圖像后,將其加載到HTML5 FileReader并轉(zhuǎn)換為Base64數(shù)據(jù)URL。然后使用Base64數(shù)據(jù)URL更新 DOM元素。

步驟3:使用Ajax上傳文件

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

如果服務(wù)器響應(yīng)包含圖像URL,則可以使用它相應(yīng)地更新 DOM元素,或者如果服務(wù)器維護(hù)了適當(dāng)?shù)膱D像訪問路徑約定(例如,/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> 

總結(jié)

以上所述是小編給大家介紹的JavaScript實(shí)現(xiàn)異步圖像上傳功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:

相關(guān)文章

  • 使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例

    使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇使用JavaScript實(shí)現(xiàn)彈出層效果的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-05-05
  • webpack優(yōu)化的深入理解

    webpack優(yōu)化的深入理解

    這篇文章主要給大家介紹了關(guān)于webpack優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 解析微信JS-SDK配置授權(quán),實(shí)現(xiàn)分享接口

    解析微信JS-SDK配置授權(quán),實(shí)現(xiàn)分享接口

    這篇文章是微信開發(fā)的很多前置條件,包括了服務(wù)端基于JAVA的獲取和緩存全局的access_token,獲取和緩存全局的jsapi_ticket,以及前端配置授權(quán)組件封裝,調(diào)用分享組件封裝。需要的朋友可以看下
    2016-12-12
  • 解決uniapp上傳小程序體積過大的問題

    解決uniapp上傳小程序體積過大的問題

    在昨天的工作中遇到了一個(gè)微信小程序上傳代碼過大的情況,在這里總結(jié)一下具體的解決步驟,首先介紹一下,技術(shù)棧是使用uniapp框架+HBuilderX的開發(fā)環(huán)境,需要的朋友可以參考下
    2023-09-09
  • 微信小程序音頻錄制波紋循環(huán)動(dòng)畫

    微信小程序音頻錄制波紋循環(huán)動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了微信小程序音頻錄制波紋循環(huán)動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳解JavaScript如何準(zhǔn)確獲取任意變量的數(shù)據(jù)類型

    詳解JavaScript如何準(zhǔn)確獲取任意變量的數(shù)據(jù)類型

    js是弱類型語(yǔ)言,或者說(shuō)是動(dòng)態(tài)語(yǔ)言,在定義變量時(shí)我們可以不提前聲明變量的類型,也可以在變量聲明后賦予不同類型的值。所以本文為大家詳解一下JavaScript如何準(zhǔn)確獲取任意變量的數(shù)據(jù)類型,需要的可以參考一下
    2022-06-06
  • js 客戶端打印html 并且去掉頁(yè)眉、頁(yè)腳的實(shí)例

    js 客戶端打印html 并且去掉頁(yè)眉、頁(yè)腳的實(shí)例

    下面小編就為大家?guī)?lái)一篇js 客戶端打印html 并且去掉頁(yè)眉、頁(yè)腳的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-11-11
  • 淺談webpack對(duì)樣式的處理

    淺談webpack對(duì)樣式的處理

    這篇文章主要介紹了淺談webpack對(duì)樣式的處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-01-01
  • 微信h5靜默和非靜默授權(quán)獲取用戶openId的方法和步驟

    微信h5靜默和非靜默授權(quán)獲取用戶openId的方法和步驟

    這篇文章主要介紹了微信h5靜默和非靜默授權(quán)獲取用戶openId的方法和步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • GoJs節(jié)點(diǎn)繪圖模板之go.Node使用示例詳解

    GoJs節(jié)點(diǎn)繪圖模板之go.Node使用示例詳解

    這篇文章主要為大家介紹了GoJs節(jié)點(diǎn)繪圖模板go.Node使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

延寿县| 台前县| 开平市| 丰原市| 大连市| 阿拉善左旗| 高碑店市| 尚志市| 鱼台县| 九江县| 新郑市| 清远市| 福清市| 定西市| 龙岩市| 纳雍县| 庐江县| 宾阳县| 大连市| 乐清市| 崇左市| 崇文区| 宁国市| 青冈县| 进贤县| 滦南县| 陆丰市| 灯塔市| 西乌珠穆沁旗| 茶陵县| 靖宇县| 疏附县| 故城县| 闸北区| 黎平县| 夹江县| 阳江市| 阜阳市| 玛纳斯县| 南江县| 霞浦县|