说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

PubNub+Cloudinary:简单几步快速搭建实时图片分享应用

HTML文档下载 WORD文档下载 PDF文档下载
如今,人们希望通过Web、移动应用来进行实时性的交互式体验,而PubNub和Cloudinary的消息推送以及基于云端图片处理的功能就能满足人们的需求。那它们的工作流程是怎样的,具体又是怎么工作的呢?

如今,人们希望通过Web、移动应用来进行实时性的交互式体验,而PubNub和Cloudinary的消息推送以及基于云端图片处理的功能就能满足人们的需求。

PubNub是一个非常强大且易于使用的云服务,可进行实时的推送信息应用。而Cloudinary是一个基于云端的图片处理、管理、存储、美化于一体的平台,同时还集成了图片抓取功能,提供API接口。


它们的工作流程很简单:使用Cloudinary让用户在云端上传很多他们想上传的图片,然后通过PubNub发送消息,通知所有与其相关的用户。接收人可以通过Cloudinary来生成与他们特定设备比例相匹配的最初图片,有效的获得图片的最佳视觉体验。上述所有的一切都没有涉及到复杂的编码、调度配置或CPU负载。

具体是如何工作的呢?
 
首先,你可以从GitHub中浏览并复制所有的源代码。

1.首先在页面中嵌入文件输入字段。该字段包含一个在服务器端生成的签名,用来授权浏览器使用Cloudinary的jQuery插件安全上传图片到Cloudinary中。下面的Ruby代码嵌入了签名的输入字段。更多详细信息,请参阅这篇文章。

cl_image_upload_tag(:photo_id, :resource_type => :image,                    :transformation => incoming_transformation)

在云端存储图像之前,:transformation参数通过使用incoming_transformation来限制图像大小、并在图片上添加水印。

这是有关incoming_transformation的定义: 

incoming_transformation = [ { width: 1200, height: 1200, crop: 'limit'},                            { overlay: 'logos_watermark', width: 0.7,                               flags: 'relative', opacity: 40, gravity: 'north', y: 20 } ]

此外,自定义的输入字段和拖动区以及上传进度条都使用了CSS和jQuery(见源代码)来实现的。

 2.当用户单击Share按钮时,具有照片标识的Ajax请求被发送到服务器端,服务器安全地发布一条信息到我们的共享PubNub通道。

以下是服务器端Ruby代码接收标识符和其他的细节信息并发布到PubNub通道, 该通道使用的Ruby库:

preloaded = Cloudinary::PreloadedFile.new(params[:photo_id])         pubnub = Pubnub.new( :publish_key => PUBNUB_PUBLISH_KEY,                      :subscribe_key => PUBNUB_SUBSCRIBE_KEY )pubnub.publish({    :channel => PUBNUB_CHANNEL,    :message => {        cloudinary_photo_id: preloaded.identifier,        user: params[:user],        message: params[:message],        kind: params[:kind],        time: Time.now.utc.iso8601    },    :callback => lambda { |x| $stderr.puts("Shared #{preloaded.public_id}: #{x}") }})

3.客户端代码在浏览器中使用PubNub的Javascript库为新消息预订一个PubNub的通道

var pubnub = PUBNUB.init({ subscribe_key: PUBNUB_SUBSCRIBE_KEY});pubnub.subscribe({ channel : PUBNUB_CHANNEL,                   callback : show_message });

当接收到消息时,该消息中包含了照片上传到Cloudinary中的公共ID。以下是Javascript代码使用Cloudinary的jQuery插件,来显示一个动态转换、基于脸部检测通过CDN的照片缩略图。一旦单击图片,最初上传的图片(该图片含有水印)就会显示出来。

function show_message(message) {  var link = $('<a></a>').    attr('href', $.cloudinary.url(message.cloudinary_photo_id)).    append($.cloudinary.image(message.cloudinary_photo_id,                { width: 150, height: 100, crop: "fill",                 gravity: "face", radius: 20, effect: "sepia"});  $('.stream').prepend($('<li></li>').append(link));}

此外,Javascript代码可获取最近的5个消息,这些消息是在页面加载之前发布的。这是通过使用PubNub的History来是实现的。

pubnub.history({    channel  : PUBNUB_CHANNEL,    limit    : 5,    callback : function(history) { $.each(history, function() { show_message(this); })}});

文章来源:cloudinary.com

$.noConflict() -JQuery API each(fn)-JQuery API eq(pos)-JQuery API get(num)-JQuery API get()-JQuery API gt(pos)-JQuery API index(subject)-JQuery API length-JQuery API lt(pos)-JQuery API size()-JQuery API CSS-JQuery API css(key, value)-JQuery API css(name)-JQuery API css(properties)-JQuery API height(val) -JQuery API height()-JQuery API width(val)-JQuery API width()-JQuery API DOM-JQuery API addClass(class)-JQuery API attr(key,fn)-JQuery API attr(key, value) -JQuery API attr(name)-JQuery API attr(properties) -JQuery API html(val)-JQuery API html()-JQuery API removeAttr(name)-JQuery API removeClass(class)-JQuery API text(val)-JQuery API text()-JQuery API toggleClass(class)-JQuery API 邮件群发软件哪个最好? 热键然后更改 换工作了,散分!!! 大家来看看[CSDN总版主的立法和执法],就会知道为什么水园的执法者如此猖狂了 请用这则给下面这个替换字符 局域网2000系统如何设置计算机描述(50分)? 强答题:请听好题"请问如何在可编辑的列表框中显示你想输入的字符串,而且可以输入多行?",开始! 下面两个操作,哪种效率高一些?或者还有什么更好的方法,谢谢! 简单问题,马上结账 ^在Delphi中是什么操作符? 各们兄台,小弟有急事相求,在线等~~~~~~~~~~~~~~~~~ 关于新闻发布时内容显示的问题 请教Tab Control的使用 microsoft jdbc for sqlserver2000 result 如何将指针移到首位!!在线等急!!! 谁有CVS下载?我去官方网站的下载,根本没有安装文件。 JSP中新建文件夹的问题 关于地图的问题,谁能解决啊? 怎样获取点击或按下winform上 [×]按钮时的事件 在服务器端执行一个 在客户端弹出对话框的程序? 如何不让局域网上的其他机用二级代理上网. oracle 表空间问题 哪位老大知道DBF的格式。 新手想请问关于刚学图象处理先学哪些?即先从哪入手? 请问关于函数挂接的问题 学习中的、已经学好的、准备学习java的朋友来看看 如何在一个线程里创建一个窗体? 难题,,,,(马上结) 怎样使windows service能接受其他程序的调用? ADO+ACCESS问题 十万火急!怎样在ASP.net(C#)中调用OCX对象 如何填充一个封闭的区域 吉林延边发生多起朝鲜警备队员越境抢劫杀人案件 perl有比较好的ide吗????? FilenameFilter用声明吗?? 怎样将两张表中相关数据绑定到DropDownList 请问java 中如何实现大小写不敏感的字符串替换???谢谢 超级头痛:如何找到DataList里的RadioButton? 权限设定时奇怪问题? 200分相送,如何写一个divx的编码过滤器 求一 SQL 语句的写法 高手来看!!!!如何在BCB程序中打开Oracle数据库 在串口通信中怎样解除waitcommevent()的等待 快三十岁了,适合再当程序员么? 小弟急着连数据库,搞不明白怎样连,拜托 怎么得到一个进程的句柄 ADO+ACCESS问题 谁能告诉我windows server 2003的显卡驱动到哪里下载 用DataOutPutStram的writeUTF写文件时开头总出现两个字符的乱码? 关于IMAIL6.0外发邮件问题 是个关于表单的问题? 小问题,在线等 谁能告诉我windows server 2003的显卡驱动到哪里下载 天天下雨如何晒衣服如题 打搅了 我是为了RENWU 路过 疯狂猜图35题.一个类似于遥控器的东西,猜品牌,品牌名由3个英文字母组成. 疯狂猜图35 肿么用纸这一个盒子 电子式电能表表盘上标有3200imp/kW·h字样(imp/kW·h其数值表示1kW·h表盘上耗电指示灯闪烁的次数).将某用电器单独接在该电能表上正常工作2min,电能表指示灯闪烁了30次,该用电器在上述时间内 山西省地图形状象什么动物 用动物名填空.山西( )楼 山西有没有为救动物而死的人呢一定是山西的 不好意思我还是没弄懂题目给的那幅图怎么就成了直角三角形 我会用那道题 刚才我提问说5年后凯美瑞是否会跌破13万元,很难过的是所有人都对我大加讽刺~所以不认真回答问题的就请别在这里废话多了请问10年后汽车是否会走进千家万户?请发表自己的看法我可以追 美国三名亚裔居民涉嫌种植窝藏销售大麻克里叹美政府关门损形象 他国外交官欲60克拉绝美粉钻将拍卖 或成全球最贵美军1美分贱卖超级航母 曾爆炸致百余美媒:斯诺登掌握美搜集中俄伊朗等国情中国最好的音响师揭秘如何制造好声音普京:乌克兰与欧盟结盟后不会加入关税墨尔本医生因与患者有不正当关系被吊销美军1美分贱卖超级航母 曾爆炸致百余60克拉绝美粉钻将拍卖 或成全球最贵普京:乌克兰与欧盟结盟后不会加入关税日本2013财年贸易逆差额创纪录驻摩洛哥大使孙树忠拜会摩三军总监本纳驻利比里亚大使张越陪同利副总统视察蒙青岛市与布兰太尔市签署结友城意向书95岁不识字老太每天看报2小时:就图起底法国新总理:被称奥朗德的“救火队4月7日浙江通报18起违反中央八项规柯文哲对连胜文下战帖 邀对方辩论市政2013年我国涉外知识产权案件审理难日美首脑会谈前瞻:TPP谈判和强化同外媒:亚太战略不顺 奥巴马“再平衡”妖魔人生魔武酒神(阴阳冕)封神旧事综漫之神龙再现都市之恶魔归来天龙八部之四号男主角重生之玉扳指仙剑昆仑冰棱时代剑仙-剑之修真者江阴旅游平谷旅游许昌旅游德宏旅游查济旅游萍乡旅游塔公旅游汕尾旅游松江旅游菏泽旅游梧州旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘