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

項目實踐一圖片上傳之form表單還是base64前端圖片壓縮(前端圖片壓縮)

 更新時間:2016年07月28日 13:57:34   作者:五木十架  
這篇文章主要介紹了項目實踐一圖片上傳之form表單還是base64前端圖片壓縮(前端圖片壓縮)的相關資料,需要的朋友可以參考下

第一個項目終于上線了,是一個叫親青籌的公益眾籌平臺,微信端,電腦端還有后臺界面大部分都是我完成的,幾個月過來,感覺收獲了很多,覺得要總結(jié)一下。

首先想到的是圖片上傳的問題。在通常表單數(shù)據(jù)都是ajax上傳的情況下,為了上傳圖片而去使用form表單感覺很蠢。然后那時候也沒有想到用jquery form插件。

后臺的同事給的方案是用iframe里寫一個form表單,然后上傳圖片之后自動提交表單,他將圖片在服務器上的地址以跳轉(zhuǎn)頁url的一部分,我再來截取的方式。

方案一:iframe+form表單

<form action="/user/uploadIdCard.do" class="fileForm picUpload" enctype="multipart/form-data" method="post">
<input type="file" id="uploadPic" name="file">
<label for="uploadPic" id="fileBtn">
+
<img src="" />
</label>
<input type="text" name="turnUrl" class="turnUrl">
</form> 
$(".turnUrl").val(window.location.pathname);
$("#uploadPic").on('change', function(event) {
event.preventDefault();
$("form").submit();
});

在需要上傳圖片的界面引入iframe,在調(diào)用公用庫里的iframe方法,獲得圖片的url并且把圖片顯示在iframe中

// 提取iframe里的路徑
function iframe(el) {
var baseurl = "";
var code, filePath;
var place = $(el)[0].contentWindow.location.search;
console.log(place);
if (place) {
code = place.match(/code=\d+/)[0].substr(5);
if (place.match(/filepath=\S+/)) {
filePath = place.match(/filepath=\S+/)[0].substr(9);
}
$(el).contents().find(".tip").css('color', '#d0021b');
console.log(filePath);
switch (code) {
case "200":
$(el).contents().find(".tip").text('上傳成功');
$(el).contents().find(".tip").css('color', '#55a012');
$(el).contents().find("#fileBtn>img").show().attr("src", baseurl + "/" + filePath);
return "/" + filePath;
case "206":
$(el).contents().find(".tip").text('文件過大');
break;
case "207":
$(el).contents().find(".tip").text('文件類型錯誤');
break;
case "208":
$(el).contents().find(".tip").text('系統(tǒng)錯誤');
}
}
}

方案二:后來發(fā)現(xiàn)這樣的做法有兩個問題,一個是用戶發(fā)的圖片太大,后臺沒有做壓縮(后臺的同事太忙了,為了遷就他們,就我們前端做壓縮了)。

第二個是,上傳圖片成功之后,圖片顯示在iframe上,這樣需要一定的反應時間,使用者有時候會反映圖片傳不上去,其實只是后臺還沒有返回……

于是決定用base64上傳到后臺的方式

<input type="file" id="uploadPic" name="file">
<label for="uploadPic" id="fileBtn">
+
<img class="showPic" src="" />
</label>
<span class="tip">請上傳圖片,大小在2M以內(nèi)<br/>(圖片類型可為jpg,jepg,png,gif,bmp)<br/>推薦圖片比例為640*400</span>
<input type="text" name="turnUrl" class="turnUrl">
<canvas id="uploadImg" style="display:none"></canvas>

結(jié)構(gòu)和原來差不多,只是多了一個canvas

$("#uploadPic").on('change', function(event) {
event.preventDefault();
console.log($(this)[0].files);
var file = $(this)[0].files[0];
if(file.size>2097152){
alert("上傳圖片請小于2M");
return false;
} if (!/image\/\w+/.test(file.type)) {
alert("文件必須為圖片!");
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e) {
createCanvas(this.result);
}
});
function createCanvas(src) {
var canvas = document.getElementById("uploadImg");
var cxt = canvas.getContext('2d');
canvas.width = 640;
canvas.height = 400;
var img = new Image();
img.src = src;
img.onload = function() {
// var w=img.width;
// var h=img.height;
// canvas.width= w;
// canvas.height=h;
cxt.drawImage(img, 0, 0,640,400);
//cxt.drawImage(img, 0, 0);
$(".showPic").show().attr('src', canvas.toDataURL("image/jpeg", 0.9));
$.ajax({
url: "/front/uploadByBase64.do",
type: "POST",
data: {
"imgStr": canvas.toDataURL("image/jpeg", 0.9).split(',')[1]
},
success: function(data) {
console.log(data);
$(".showPic").show().attr('data-url',"/"+ data.url);
}
});
}
}

1.首先是用的input的file文件的信息,判斷文件大小file.size,以及文件是否為圖片file.type

2.再通過html5的FileReader接口來獲得這個圖片的base64數(shù)據(jù)

3.將這個base64傳入canvas中,作為一張圖的src,這時候可以設置圖片的分辨率大小,保證上傳的圖都是統(tǒng)一的分辨率。當然也可以按照圖片原來的大小。

4.在ajax之前,把處理后的base64直接顯示出來(這樣用戶就可以立刻看到自己上傳的圖片),再將 canvas.toDataURL("image/jpeg", 0.9).split(',')[1] (類型為image/jpeg,就可以用第二個參數(shù)來設置畫質(zhì)了)傳到后臺對應的接口

5.再將后臺返回的url 綁在圖片的data-url屬性上,在ajax上交整個表單時獲取這個data-url就好了,這樣用戶可以最快時間看到,而url其實還在ajax到后臺的過程中

后記:這兩個方案都有一個問題,會給后臺上傳很多冗余圖片。不過后臺的同事貌似沒什么意見,囧。

實際效果是這樣的 http://www.qqchou.org/qqcweb/pages/photoIframe.html

以上所述是小編給大家介紹的項目實踐一圖片上傳之form表單還是base64前端圖片壓縮(前端圖片壓縮),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 微信小程序中使用自定義字體的實現(xiàn)與體驗優(yōu)化

    微信小程序中使用自定義字體的實現(xiàn)與體驗優(yōu)化

    由于微信支持的字體非常有限,不能滿足個性化的需求,因此在開發(fā)的過程中可能會需要使用自定義字體,下面這篇文章主要給大家介紹了關于微信小程序中使用自定義字體的實現(xiàn)與體驗優(yōu)化的相關資料,需要的朋友可以參考下
    2022-02-02
  • 微信小程序獲取公眾號文章列表及顯示文章的示例代碼

    微信小程序獲取公眾號文章列表及顯示文章的示例代碼

    這篇文章主要介紹了微信小程序獲取公眾號文章列表及顯示文章的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • js實現(xiàn)select二級聯(lián)動下拉菜單

    js實現(xiàn)select二級聯(lián)動下拉菜單

    這個是簡單也是最基本的下拉框聯(lián)動的示例,這個示例主要針對那些只有二級聯(lián)動,且第一級是固定的選項,第二級的內(nèi)容也比較簡單,不刷新的聯(lián)動,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JS?debug跳過的7種方法總結(jié)

    JS?debug跳過的7種方法總結(jié)

    在JS開發(fā)過程中,代碼可能存在一些語法或者邏輯上的錯誤,導致程序不能得到我們想要的結(jié)果,這時就需要我們找到并修復這些錯誤,我們將查找和修復錯誤的過程稱為調(diào)試或代碼調(diào)試,這篇文章主要給大家介紹了關于JS?debug跳過的7種方法,需要的朋友可以參考下
    2023-07-07
  • 基于JavaScript實現(xiàn)繼承機制之原型鏈(prototype chaining)的詳解

    基于JavaScript實現(xiàn)繼承機制之原型鏈(prototype chaining)的詳解

    我們知道在JavaScript中定義類的原型方式,而原型鏈擴展了這種方式,以一種有趣的方式實現(xiàn)繼承機制。prototype 對象是個模板,要實例化的對象都以這個模板為基礎??偠灾琾rototype 對象的任何屬性和方法都被傳遞給那個類的所有實例。原型鏈利用這種功能來實現(xiàn)繼承機制
    2013-05-05
  • javascript中call,apply,bind的區(qū)別詳解

    javascript中call,apply,bind的區(qū)別詳解

    這篇文章主要介紹了javascript中call,apply,bind的區(qū)別詳解,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2020-12-12
  • JavaScript顯示當前文檔最后修改日期的方法

    JavaScript顯示當前文檔最后修改日期的方法

    這篇文章主要介紹了JavaScript顯示當前文檔最后修改日期的方法,實例分析了javascript中document.lastModified的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • 禁止ajax緩存獲取程序最新數(shù)據(jù)的方法

    禁止ajax緩存獲取程序最新數(shù)據(jù)的方法

    為了保證我們讀取的信息都是最新的,我們需要禁止ajax的緩存功能,下面我就介紹一下這個方法的使用
    2013-11-11
  • JavaScript中數(shù)組雙重去重的方法總結(jié)

    JavaScript中數(shù)組雙重去重的方法總結(jié)

    這篇文章主要為大家學習介紹了JavaScript中數(shù)組雙重去重的幾個常用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-07-07
  • 微信JS-SDK選取手機照片上傳功能

    微信JS-SDK選取手機照片上傳功能

    這篇文章主要為大家詳細介紹了微信JS-SDK選取手機照片上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

化州市| 新巴尔虎左旗| 固安县| 大悟县| 连州市| 元谋县| 阿克| 环江| 班戈县| 科技| 昂仁县| 五峰| 鄂尔多斯市| 辽阳县| 垣曲县| 永昌县| 昭苏县| 云阳县| 昆山市| 台湾省| 台山市| 长治县| 瑞丽市| 余庆县| 十堰市| 石楼县| 普安县| 宜兴市| 德江县| 汾阳市| 桑植县| 外汇| 江陵县| 馆陶县| 古蔺县| 邯郸县| 平顶山市| 丰台区| 蓬莱市| 怀仁县| 公安县|