一、需求  

  公司所有的上传页面都用七牛,前端不免要直接调用七牛的代码进行上传,以下是一个实现七牛上传的案例,制作一个常见的商品评价页面,页面需求很常见当上传到第五章图片的时候,上传按钮消失,上传需要显示当前进度,上传完毕以后可以删除图片,如图1所示。

二、过程

  七牛官网的比较多比较乱,直接给大家一个配置好可以用的,如需其他定制,只能自己去啃文档了,整个demo的js核心代码如下

var progress1;
var waikuang;
var img;
var span;
var flag = 0; // 判定当前是第几张图片 var uploader = Qiniu.uploader({
runtimes: 'html5,flash,html4', // 上传模式,依次退化
browse_button: 'pickfiles', // 上传选择的点选按钮,**必需**
domain: '公司的七牛域名',
get_new_uptoken: true, // 设置上传文件的时候是否每次都重新获取新的 uptoken
container: 'container', // 上传区域 DOM ID,默认是 browser_button 的父元素,
max_file_size: '2mb', // 最大文件体积限制
flash_swf_url: 'path/of/plupload/Moxie.swf', //引入 flash,相对路径
max_retries: 3, // 上传失败最大重试次数
dragdrop: true, // 开启可拖曳上传
drop_element: 'container', // 拖曳上传区域元素的 ID,拖曳文件或文件夹后可触发上传
chunk_size: '4mb', // 分块上传时,每块的体积
auto_start: true, // 选择文件后自动上传,若关闭需要自己绑定事件触发上传,
multi_selection: !(mOxie.Env.OS.toLowerCase() === "ios"),
uptoken_func: function (file) {
console.log(file)
var ajax = new XMLHttpRequest();
ajax.open('POST', 公司后台提供的七牛接口, false);
ajax.send();//
if (ajax.status === 200) {
var res = JSON.parse(ajax.responseText);
console.log('custom uptoken_func:' + res.uptoken);
return res.uptoken;
} else {
console.log('custom uptoken_func err');
return '';
}
},
auto_start: true,
// log_level : 5,//打印日至
init: {
'FilesAdded': function (up, files) {
plupload.each(files, function (file) { // 文件添加进队列后,处理相关的事情
waikuang = document.createElement("a");
waikuang.className = "showPic";
waikuang.id=file.name+"hmsg" img= document.createElement("img");
span = document.createElement("span");
span.className = "closePic";
waikuang.appendChild(img);
img.style.zIndex=10;
waikuang.appendChild(span);
progress1 = document.createElement("progress");
progress1.max = 100;
waikuang.appendChild(progress1);
document.getElementById("container").appendChild(waikuang); });
},
'BeforeUpload': function (up, file) {
// 每个文件上传前,处理相关的事情 },
'UploadProgress': function (up, file) {
// 每个文件上传时,处理相关的事情
progress1.value = file.percent;
console.log(file.percent)
},
'FileUploaded': function (up, file, info) {
// 每个文件上传成功后,处理相关的事情
var res = JSON.parse(info);
var sourceLink = "http://7xs8w3.com1.z0.glb.clouddn.com/" + res.key; //获取上传成功后的文件的Url
img.src = sourceLink;
span.id = res.key;
waikuang.removeChild(progress1);
window.sessionStorage.setItem(res.key,sourceLink);
flag++;
//监听删除
var x = document.getElementById(span.id);
x.onclick= function () {
document.getElementById("container").removeChild(document.getElementById(res.key+"hmsg"));
window.sessionStorage.removeItem(res.key);
flag--;
if(flag<5){
document.getElementById("pickfiles").style.display="inline-block";
}
}
},
'Error': function (up, err, errTip) {
alert("上传出错,请稍后再尝试")
},
'UploadComplete': function () {
//队列文件处理完毕后,处理相关的事情
if(flag>=5){
document.getElementById("pickfiles").style.display="none";
}
},
'Key': function (up, file) {
// 若想在前端对每个文件的key进行个性化处理,可以配置该函数
// 该配置必须要在 unique_names: false , save_key: false 时才生效
var key = file.name;
// 刷新token;
return key
}
}
});

  关键处已经有注释,前端需要做的是将公司独有的接口和七牛域名进行配置,在七牛上传插件初始化的时候有大概七个回调,分别代表着图片上传前后和图片上传中要处理的代码,我这个案例在图片上传以前要简历一个承载图片的div和一个关闭按钮,图片上传的时候要改变进度,图片上传以后判断当前图片数目如果够五张了,则隐藏上传框,删除图片以后如果不足五张则显示上传框,上传进度条要符合项目的主题色,所以要更改一下process标签的默认样式,这里以webkit内核给出模板,代码如下

html部分代码

<div class="photo_star">
<div id="container">
<a id="pickfiles" class="showPic">
<img src="data:images/sendPhoto.png">
</a>
</div>
</div>

css更改默认样式代码

    /*默认情况下的颜色*/
progress::-webkit-progress-bar {
background: #fff;
} /*进度滚动条的颜色*/
progress::-webkit-progress-value {
background: #fd6897;
}

  

三、难点和坑

  七牛发ajax获取token的时候采用cors跨域方法,需要后端的配合否则会报ajax跨域失败的错误,事例代码是没错的,若报这个错,各位前端同胞直接找后台即可。

前端js调用七牛制作评价页面案例的更多相关文章

  1. 第一个go的web程序;调用七牛云存储的音频api问题解决;条件搜寻文件中的内容,字符串拼接+在上一行

    package main import ( "html/template" "io" "io/ioutil" "log" ...

  2. 使用微信 SDK 上传图片到七牛

    总体思路是:在微信下选好图片后将图片上传到微信服务器,在后端使用微信服务器返回的图片 serverId 加上调用接口的 ApiTicket 通过七牛的 fetch 接口向微信服务器下载多媒体文件的接口 ...

  3. ***七牛跨域上传图片JS SDK

    SDK: http://developer.qiniu.com/code/v6/sdk/javascript.html#upload 上传 在页面中引入 plupload,plupload.full. ...

  4. C# winForm webBrowser页面中js调用winForm类方法(转)

      有时我们在winform项目中嵌入了网页,想通过html页面调用后台方法,如何实现呢?其实很简单,主要有三部:   1.在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类 ...

  5. html/css/js 学习笔记 - 牛客网试卷:前端工程师能力评估

    display属性 : block : CSS1 块对象的默认值.将对象强制作为块对象呈递,为对象之后添加新行   可以定义高度和宽度 none : CSS1 隐藏对象.与 visibility 属性 ...

  6. 前端 JS/TS 调用 ASP.NET Core gRPC-Web

    前言 在上两篇文章中,介绍了ASP.NET Core 中的 gRPC-Web 实现 和 在 Blazor WebAssembly 中使用 gRPC-Web,实现了 Blazor WebAssembly ...

  7. 七牛云实现前端js上传实现办法

    1.七牛云上传前台页面 1.1 安装相关包 npm install --save jquery@1.12.1 # 安装jquery 1.2 index.html 引入qiniu.min.js < ...

  8. Gridview 行变色和行按钮调用前端js

    1.鼠标移动某一行 ,变色 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Ro ...

  9. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

随机推荐

  1. MySQL的if,case语句使用总结

    原文地址: http://outofmemory.cn/code-snippet/1149/MySQL-if-case-statement-usage-summary

  2. mysql二级索引

    以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引.如果您的表上定义有主键,该主键索引是聚集索引.如果你不定义为您的表的主键 时,MySQL取第一个唯一索引(unique)而且只含非 ...

  3. Entity Framework 杂记

    本系列文章,将介绍本人在学习和使用Entity Framewrok的过程中的收获与心得. 或许有的地方讲的错误 欢迎大家批评指出. 1.EntityFramework 数据库的迁移 2.Mysql 该 ...

  4. HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。

    今天,在vs2013中新建了一个placard.json文件,当我用jq读取它的时候,去提示404,直接在浏览器访问这个文件,提示: HTTP 错误 404.3 – Not Found 由于扩展配置问 ...

  5. vtkQuadratic创建半球面

    用的关键类:vtkQuadric.vtkSampleFunction.vtkContourFilter:用于创建方框的类vtkOutlineFilter #ifndef INITIAL_OPENGL ...

  6. HTML插入FLASH

    <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" code ...

  7. 利用gcc自带的功能-fstack-protector检测栈溢出及其实现

    最近又遇到了一个崩溃,栈回溯非常怪异. /lib/i386-linux-gnu/libc.so.(gsignal+0x4f) [0xb2b751df] /lib/i386-linux-gnu/libc ...

  8. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  9. 利用JS实现点击按钮后图片自动切换

    我么常常看到一个网站的主界面的图片可以切换自如,那么又是如何实现的呢? 1.HTML页面布局如图所示: Main(div) top(div)(显示需要显示的图片) bottom UL (li)< ...

  10. 如何添加商*通新对话快捷链接?不用js代码

    我们在使用商务通一般都是在页面中嵌入一段js代码,如果您是js洁癖,是不是在想着如何直接用一张小图加上商*通新对话链接来代替呢?好,那就一起来研究一下吧. 首先,我们打开一个有商*通js弹窗的页面,比 ...