一会前、背景和需求
在商家上架新商品時拨黔,需要從本地上傳商品圖片并預(yù)覽
將圖片連同其他商品信息放入表單蛔溃,通過POST請求發(fā)送給后端
二、HTML代碼
<div class="box">
<div class="box-left">
<div class="title"><h1>上傳商品圖片</h1></div>
<div class="sizeHint">(圖片大小不得超過2M)</div>
<div class="content">
<div id="img">圖片預(yù)覽</div>
<form id="form1" action="">
<input type="file" name="file" id="pic" onchange="preview(this,'img')">
</form>
<div class="link">
<a href="/backstage/" id="link">返回后臺管理頁面</a>
</div>
</div>
</div>
三篱蝇、實(shí)現(xiàn)思路
1挑庶、通過 [type=file] 的input上傳文件
為這個 [type=file] 的input綁定onchange事件
將接收到的圖片文件傳到preview函數(shù)中
檢測文件類型和大小是否符合要求
2耻煤、將文件以Data URL形式讀入頁面
創(chuàng)建FileReader實(shí)例
通過onload函數(shù)將圖片渲染到頁面上
3、通過Ajax發(fā)送FormData數(shù)據(jù)類型的POST請求
先利用已有的表單(商品數(shù)據(jù))初始化Formdata實(shí)例
再通過append方法將圖片文件追加到Formdata實(shí)例內(nèi)
四、相關(guān)JS代碼
關(guān)于圖片的上傳和預(yù)覽:
function preview(file,img)
{
if (file.files && file.files[0]){
var size = file.files[0].size;
if(size > 2 * 1024*1024){
alert("上傳大小不符合");
return false;
}
// 獲取文件名 包含后綴
var src = file.files[0].name;
// 獲取文件后綴
var type=(src.substr(src.lastIndexOf("."))).toLowerCase();
// 判斷文件類型
if(type != ".jpg" && type != ".gif" && type !=".jpeg" && type != ".png"){
alert("您上傳圖片的類型不符合(.jpg|.jpeg|.gif|.png)叛买!");
return false;
}
var reader = new FileReader();
//將文件以Data URL形式讀入頁面
reader.readAsDataURL(file.files[0]);
var prevDiv = document.getElementById(img);
//成功讀取后 顯示圖片
reader.onload = function(evt){
prevDiv.innerHTML = '<img src="' + evt.srcElement.result + '" style="max-width:220px;" />';
}
}
}
Ajax請求:
$(function(){
//為“立即添加”按鈕綁定click事件
$('#btn-submit').click(function()
{
// 用已有表單來初始化
var formData = new FormData($("#new")[0]);
//將圖片文件對象添加到formData中
formData.append('img', $("#pic")[0].files[0]);
formData.append('csrfmiddlewaretoken', '{{ csrf_token }}');
$.ajax({
type : 'post',
//這里寫后端處理的url
url : ' ',
data : formData,
cache : false,
async: false,
// 不處理發(fā)送的數(shù)據(jù),因?yàn)閐ata值是Formdata對象唤殴,不需要對數(shù)據(jù)做處理
processData : false,
// 不設(shè)置Content-type請求頭
contentType : false,
success : function() { },
error : function(){ }
})
});
});
完整的源代碼請前往我的github倉庫
五斋攀、效果圖
image.png