上周帮其它公司套一下一个web端微信投票系统的后台接口,遇到了一个图片以及视频上传报名的小问题,网上实现方式有很多但都不是ui上面的效果,于是自己动手改造了一个。先来看看效果图

流程很简单,就是点击每一个加号浏览本地图片并确定后会自动发送一个formData到后台提交图片,成功后会返回图片在后台的url,前端界面会在提交过程中显示上传进度,上传过程会有提示,先看基本html代码吧

     <div class="img">
                            <i id="proTxt_3" class="upload-txt"></i>
                            <div id="proLong_3" class="upload-bar"></div>
                            <img src="" alt="" id="previewIndex_3" />
                            <input type="file" name="fileToUpload" class="fileToUpload up" accept="image/*" onchange="showPreview(this,3)" />
                        </div>

每块div代表一个file选择框,这里就不放另外两个了

上传部分使用了h5的xmlhttprequest,并监听上传进度(整体代码就在这里了):

//图片预览
varuploder= {
fileToUpload: document.getElementsByClassName("fileToUpload"),
thumb: document.getElementsByClassName("thumb")
};
imgArr= [];//传到后台的图片
videoUrl='';//传到后台的视频
functionshowPreview(img, index) {
];//当前文件(默认只能单选)
varlen=uploder.fileToUpload.length;
;
) {//获取文件大小做相应限制
).toString() +'MB';
console.log(fileSize);
} else {
).toString() +'KB';
console.log(fileSize);
};
if (window.FileReader) {//文件预览
varfr=newFileReader();
fr.onloadend=function (e) {
; i<=len; i++) {
if (i==index) {//当前图片索引
document.getElementById('previewIndex_'+i).src=e.target.result;
varfd=newFormData();
fd.append('file', file);//'file'为传过去的参数(type String)
console.log(file);
varxhrs=newXMLHttpRequest();
xhrs.upload.addEventListener("progress", uploadProgress, false);//监听上传进度
xhrs.addEventListener("load", uploadComplete, false);
xhrs.addEventListener("error", uploadFailed, false);
xhrs.open("POST", 'http://vote.jiugoule.net/index.php?s=app/participate/upload&uid=93&token=b8d3bce08ccd81677f935c2da6e7b4f0&activity_id=2');
xhrs.send(fd);
functionuploadProgress(event) {//上传中
) {//添加视频背景图
$(".video-bg").show();
}
if (event.lengthComputable) {
/ event.total);
//console.log(document.getElementById("proTxt_" + index),index);
document.getElementById("proTxt_"+index).innerHTML=percentComplete.toString() +'%';
document.getElementById("proLong_"+index).style.height =percentComplete.toString() +'%';
}
};
functionuploadComplete(event) {//上传完成
) {//视频(需知道位置)
document.getElementById("proTxt_"+index).innerHTML="视频上传完成,点击更改";
$(".video-select").css({//防止file选择被遮挡
});
//return;
varresVideo=eval("("+ event.target.responseText +")");//视频
videoUrl=resVideo.data.url;
} else {
varresJson=eval("("+ event.target.responseText +")");
imgArr.push(resJson.data.url);
document.getElementById("proTxt_"+index).innerHTML="上传成功";
setTimeout(() => {
document.getElementById("proTxt_"+index).style.display ="none";
document.getElementById("proLong_"+index).style.display ="none";
)
}
};
functionuploadFailed(event) {//上传失败
};
};
}
};
fr.readAsDataURL(file);
};
}

传到后台的地址以及成功后处理方法因人而异。

//图片预览
varuploder= {
fileToUpload: document.getElementsByClassName("fileToUpload"),
thumb: document.getElementsByClassName("thumb")
};
imgArr= [];//传到后台的图片
videoUrl='';//传到后台的视频
functionshowPreview(img, index) {
];//当前文件(默认只能单选)
varlen=uploder.fileToUpload.length;
;
) {
).toString() +'MB';
console.log(fileSize);
} else {
).toString() +'KB';
console.log(fileSize);
};
if (window.FileReader) {//文件预览
varfr=newFileReader();
fr.onloadend=function (e) {
; i<=len; i++) {
if (i==index) {//当前图片索引
document.getElementById('previewIndex_'+i).src=e.target.result;
varfd=newFormData();
fd.append('file', file);//'file'为传过去的参数(type String)
console.log(file);
varxhrs=newXMLHttpRequest();
xhrs.upload.addEventListener("progress", uploadProgress, false);//监听上传进度
xhrs.addEventListener("load", uploadComplete, false);
xhrs.addEventListener("error", uploadFailed, false);
xhrs.open("POST", 'http://vote.jiugoule.net/index.php?s=app/participate/upload&uid=93&token=b8d3bce08ccd81677f935c2da6e7b4f0&activity_id=2');
xhrs.send(fd);
functionuploadProgress(event) {//上传中
) {//添加视频背景图
$(".video-bg").show();
}
if (event.lengthComputable) {
/ event.total);
//console.log(document.getElementById("proTxt_" + index),index);
document.getElementById("proTxt_"+index).innerHTML=percentComplete.toString() +'%';
document.getElementById("proLong_"+index).style.height =percentComplete.toString() +'%';
}
};
functionuploadComplete(event) {//上传完成
) {//视频(需知道位置)
document.getElementById("proTxt_"+index).innerHTML="视频上传完成,点击更改";
$(".video-select").css({//防止file选择被遮挡
});
//return;
varresVideo=eval("("+ event.target.responseText +")");//视频
videoUrl=resVideo.data.url;
} else {
varresJson=eval("("+ event.target.responseText +")");
imgArr.push(resJson.data.url);
document.getElementById("proTxt_"+index).innerHTML="上传成功";
setTimeout(() => {
document.getElementById("proTxt_"+index).style.display ="none";
document.getElementById("proLong_"+index).style.display ="none";
)
}
};
functionuploadFailed(event) {//上传失败
};
};
}
};
fr.readAsDataURL(file);
};
}

最新文章

  1. mui问题
  2. 完全平方数(钟神的hao)
  3. 【Beta版本】冲刺计划及安排
  4. C#面向对象的方法写数组的功能
  5. Julia中文教程资源.txt
  6. SASS学习笔记_01
  7. TaskController.java-20160611
  8. PostgreSQL的AnynonArray的例子
  9. ASP.NET MVC轻教程 Step By Step 6——改进表单
  10. MySQL原生HA方案 – Fabric体验之旅
  11. javaScript中小数取整,四种方法的比较
  12. WIFI无线adb调试android
  13. maven 引用自己的jar
  14. Codeforces 85D Sum of Medians(线段树)
  15. mmmmmmmm
  16. Windows下JIRA6.3.6安装、汉化、破解
  17. 多线程学习系列二(使用System.Threading)
  18. 微信小程序 picker 中range-key的坑
  19. 走过路过不要错过 包你一文看懂支撑向量机SVM
  20. 在java中,OOA是什么?OOD是什么?OOP是什么?

热门文章

  1. 201521123076 《Java程序设计》第10周学习总结
  2. 201521123096《Java程序设计》第十二周学习总结
  3. 201521123119《Java程序设计》第9周学习总结
  4. 201521123121 《Java程序设计》第13周学习总结
  5. 201521123027 &lt;java程序设计&gt;第十二周作业总结
  6. 201521123101 《Java程序设计》第12周学习总结
  7. Linux系统文件与目录权限管理
  8. Java实现基本排序算法
  9. Flask-WTF CSRF 保护P3
  10. 原型模式和基于原型继承的js对象系统