亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

方案一: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)用公用庫(kù)里的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('文件過(guò)大');
break;
case "207":
$(el).contents().find(".tip").text('文件類型錯(cuò)誤');
break;
case "208":
$(el).contents().find(".tip").text('系統(tǒng)錯(cuò)誤');
}
}
}

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

第二個(gè)是,上傳圖片成功之后,圖片顯示在iframe上,這樣需要一定的反應(yīng)時(shí)間,使用者有時(shí)候會(huì)反映圖片傳不上去,其實(shí)只是后臺(tái)還沒(méi)有返回……

于是決定用base64上傳到后臺(tái)的方式

<input type="file" id="uploadPic" name="file">
<label for="uploadPic" id="fileBtn">
+
<img class="showPic" src="" />
</label>
<span class="tip">請(qǐng)上傳圖片,大小在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)和原來(lái)差不多,只是多了一個(gè)canvas

$("#uploadPic").on('change', function(event) {
event.preventDefault();
console.log($(this)[0].files);
var file = $(this)[0].files[0];
if(file.size>2097152){
alert("上傳圖片請(qǐng)小于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.再通過(guò)html5的FileReader接口來(lái)獲得這個(gè)圖片的base64數(shù)據(jù)

3.將這個(gè)base64傳入canvas中,作為一張圖的src,這時(shí)候可以設(shè)置圖片的分辨率大小,保證上傳的圖都是統(tǒng)一的分辨率。當(dāng)然也可以按照?qǐng)D片原來(lái)的大小。

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

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

后記:這兩個(gè)方案都有一個(gè)問(wèn)題,會(huì)給后臺(tái)上傳很多冗余圖片。不過(guò)后臺(tái)的同事貌似沒(méi)什么意見,囧。

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

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

相關(guān)文章

  • 詳解JavaScript狀態(tài)容器Redux

    詳解JavaScript狀態(tài)容器Redux

    Redux官網(wǎng)上是這樣描述Redux,Redux is a predictable state container for JavaScript apps.(Redux是JavaScript狀態(tài)容器,提供可預(yù)測(cè)性的狀態(tài)管理)。目前Redux GitHub有5w多star,足以說(shuō)明 Redux 受歡迎的程度
    2021-06-06
  • 微信小程序h5頁(yè)面跳轉(zhuǎn)小程序的超詳細(xì)講解

    微信小程序h5頁(yè)面跳轉(zhuǎn)小程序的超詳細(xì)講解

    開發(fā)中涉及到一個(gè)需求,就是從一個(gè)預(yù)約票購(gòu)買的頁(yè)面需要跳轉(zhuǎn)到?小程序,下面這篇文章主要給大家介紹了關(guān)于微信小程序h5頁(yè)面跳轉(zhuǎn)小程序的超詳細(xì)講解,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 15分鐘深入了解JS繼承分類、原理與用法

    15分鐘深入了解JS繼承分類、原理與用法

    這篇文章主要介紹了JS繼承分類、原理與用法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了javascript原型鏈繼承、構(gòu)造函數(shù)繼承、組合繼承、原型式繼承、寄生式繼承和寄生組合式繼承等相關(guān)原理及使用方法,需要的朋友可以參考下
    2019-01-01
  • JS如何判斷對(duì)象是否包含某個(gè)屬性

    JS如何判斷對(duì)象是否包含某個(gè)屬性

    這篇文章主要介紹了JS如何判斷對(duì)象是否包含某個(gè)屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • onclick與listeners的執(zhí)行先后問(wèn)題詳細(xì)解剖

    onclick與listeners的執(zhí)行先后問(wèn)題詳細(xì)解剖

    javascript中onclick與listeners的執(zhí)行先后問(wèn)題一直都是大家所疑惑的地方,接下來(lái)將為大家解決此疑惑,感興趣的朋友可以了解下哦
    2013-01-01
  • input輸入框限制只能輸入數(shù)字的方法實(shí)例(個(gè)人認(rèn)為最好的)

    input輸入框限制只能輸入數(shù)字的方法實(shí)例(個(gè)人認(rèn)為最好的)

    在很多業(yè)務(wù)中需要對(duì)輸入框進(jìn)行字符限制,比如金額輸入框、手機(jī)號(hào)碼輸入框等,下面這篇文章主要給大家介紹了關(guān)于input輸入框限制只能輸入數(shù)字的相關(guān)資料,文中介紹的方法個(gè)人認(rèn)為最好的,需要的朋友可以參考下
    2022-10-10
  • 原生js操作checkbox用document.getElementById實(shí)現(xiàn)

    原生js操作checkbox用document.getElementById實(shí)現(xiàn)

    js操作checkbox本人建議用document.getElementById(checkbox_id).checked不推薦使用jquery操作checkbox,感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10
  • 微信小程序dom操作的替代思路實(shí)例分析

    微信小程序dom操作的替代思路實(shí)例分析

    這篇文章主要介紹了微信小程序dom操作的替代思路,結(jié)合實(shí)例形式分析了微信小程序通過(guò)事件響應(yīng)、動(dòng)態(tài)操作元素屬性來(lái)實(shí)現(xiàn)dom操作效果,需要的朋友可以參考下
    2018-12-12
  • 輕松實(shí)現(xiàn)js選項(xiàng)卡切換效果

    輕松實(shí)現(xiàn)js選項(xiàng)卡切換效果

    這篇文章主要幫助大家輕松實(shí)現(xiàn)js選項(xiàng)卡切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • js遍歷獲取表格內(nèi)數(shù)據(jù)的方法(必看)

    js遍歷獲取表格內(nèi)數(shù)據(jù)的方法(必看)

    下面小編就為大家?guī)?lái)一篇js遍歷獲取表格內(nèi)數(shù)據(jù)的方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論