⑴ 用的是七牛云,当出现多个js加载慢的问题要怎么解决
建议你观察下页面内资源的加载时间,同时在页面中打开多个js文件主要耗时为TTFB,主要耗时为「等待某个js加载渲染完成」+「等待dns解析时间」+「浏览器的pending策略」等。你在页面内同步加载了多个js资源,所以下载速度的不可控是正常的。
因为JS在执行的时候会影响到页面的DOM和样式等情况。浏览器在解析渲染HTML的时候,如果解析到需要下载文件的script标签,那么会停止解析接下来的HTML,然后下载外链JS文件并执行。减少 JavaScript 对性能的影响有以下几种方法:1、将所有的
⑵ 七牛云存储怎么布署到服务器
"在网络覆盖的范围内手机、平板、电脑可以随时的实现文件同步
"部门之间可以安全的文件分享
"所有人对文件的操作行为均可以被记录
"登录身份认证机制与企业现有管理机制相结合
"存放于数据中心的文件具备高强度的加密
正是从这种需求出发,推动了厂商对企业私有云存储的技术研发,目前市场上已经有部分成熟的产品方案得到应用,笔者刚刚拿到VEsystem 推出的VECloud 2.0最新版,目前正在测试中;在此谨以VECloud 2.0(和信云存储)为例,向大家讲解企业私有云存储的快捷部署方法,供企业信息管理人员在方案选择时参考所有。
抽象来看与网络云网盘一样,部署好的私有云存储是一个可以通过浏览器输入网址或IP地址直接访问的网站。那么除服务器基础平台的建设之后,我们需要就是搭建一套Web Server 的发布平台,最常见的WEB发布平台应该是IIS(微软服务器版系统中自身提供) 、以及Apache ,根据不同网站开发语言的需要还需要配置脚本解释与数据库支持;比如大家经常提到的ASP + msSQL 、PHP + mySQL 等;
2
VECloud 2.0 对WEB平台要求是:PHP 5.10 / mySQL 5.5
以往在Windows平台手工搭建AMP环境(Apache MySQL PHP)是比较复杂的,幸好现在已经有相应的一键式集成包,可以帮助我们快速完成这项工作。笔者比较习惯使用的是EasyPHP,本次部署所采用的版本是12.0 ;EasyPHP 安装非常简单几乎你只用点下一步即可以完成(对AMP 环境的搭建比较熟的朋友可以越过章节)。
安装结束后会自动打开默认浏览器呈现当前AMP配置运行信息,如上图我们可以看到APACHE 2.42 / MYSQL 5.5.2 / PHP 5.4.4 即已经有运行中,有关EasyPHP 12.0 的详细调试使用可以参考官方教程或相关文章,作为服务运行的支撑平台,其不属于云存储的技术讨论范围后面的章节中不再重复提及。
接下来我将VECloud2.0 的WEB站点的发布包,解压到WWW 目录中,然后通过浏览器访问本机IP 如127.0.0.1??即可以打开这个站点;站点首次被打开时会有一个安装向导完成初始的部署工作。如下图:
点击"现在就开始"…
接下来的页面中会显示出当前WEB服务器的环境配置信息,以及和信云存储对环境基本要求自检结果,为了保障功能的全面正常执行,建议按照提示信息的要求,调整服务器的配置信息以达到推荐标准,如下图:
在默认情况下 PHP 扩展中的PHP_EXIF 、PHP_GETTEXT 、PHP_LDAP 、PHP_OPENSSL 并未消开启,最大文件限制默认为2M ,这里会建议我们开启上述扩展并调大文件限制。
这都可以通过修改PHP.INI 配置文件来实现,PHP.INI 文件默认存放在apache 目录中,可以用记事本打开
可以通过查找方式找到PHP_EXIF 、PHP_GETTEXT 、PHP_LDAP 、PHP_OPENSSL 这几项PHPExt 所在位置,注意行前一个" ; "(分号),分号表示此行被注释,只需要将分号去掉即可,(如上图)如果是手工搭建的AMP 环境需要确定对应DLL 文件已经安装注册。
同时找到upload_max_filesize = 项,将最大上传文件的大小设定到一个合适的值。如上图
重新启动Apache 服务,刷新页面后我们可以看到自检测结果已经发生变化,目前我们WEB服务端的配置已经完全符合推荐要求。
点击"下一步"继续…
接下来的配置是关于MYSQL数据库的参数,我们需要创建一个数据库管理员以及对应的数据库、表名前缀;
可以通过PHPMYADMIN(MYSQL的在线管理工具,如果是通过EASYPHP安装则已经自带)来方便的创建用户并同时创建与用户名同名的数据库;如下图:
添加 [ 用户 ] / [ 添加用户 ], 输入用户名VECLOUD 、主机:127.0.0.1(如无分布部署或有额外的名称解析,应采用本机IP), 勾选"创建与用户同名的数据库并授予所有权限"
通过上述操作我们就为云存储服务端创建了专用的数据库管理用户及同名的数据库。
返回到云存储的安装界面,注意最后一项是关于"文件存储路径"的设置,在此处可以设定一个目标路径,当云存储服务上线之后,用户上传分享的文件都将保存在这个路径之下,因为目标路径建议采用专业存储阵列或设备,确保并发速度与数据安全。
接下来的页面中可对云存储的管理用户与密码进行设置,提示:管理员将可以在后台管理所有用户的信息以及系统的相关参数设置,一定要管理好该用户并设置高强度的密码,防止被猜测破解后登录。
点击"下一步"继续
至此,"和信云存储"的安装已经完成,可以试一下在浏览器中再次打开127.0.0.1 访问
这一次打开的不再是安装向导,一个真正架设在内网中的私有云存储用户登录界面呈现在眼前,VECloud 同时提供了Windows / Android / IPhone 、IPAD 的客户端,对此私有云存储的访问方式不限于网页登录,也可以随时用移动设备登录分享、同步自己的文件。
天互数据 为您解答,希望能帮到你
⑶ 七牛云创建域名显示未备案,但是域名已经完成工信部备案,这个要怎么处理
你说的这个问题还是比较常见的,一般产生这种情况的原因是工信部的备案信息未同步到上海通管局,七牛云以上海通管局查询的结果为准,正常情况下,同步一般需要 1-2 天;
⑷ 关于七牛云存储自定义URL的问题
近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文: 使用七牛云存储的一些经验总结
599错误处理
如果在与七牛的交互中出现http状态码为599的错误,一句话,不要犹豫,直接联系七牛技术支持 。七牛的文档也在很多地方提到这个错误,都是指导大家去联系技术支持的。笔者是在分块上传后的 mkfile 调用时出现的,联系技术支持后,说是调整了一下,让我重试。后来就好了...
分块上传无法从回调中获得文件的原始名
简单上传采用的是multipart/form-data方式上传,七牛服务端能够从请求中获得文件的原始名,并支持使用魔法变量 $(fname) 回调业务服务器。不过当使用分片上传的时候情况有所不同。分片上传需要在最后调用 mkfile ,来将分片拼接起来。但是, mkfile 接口支持普通的请求,并没有附带文件名,所以七牛也就无法获得文件名,此时从 $(fname) 中是取不到文件名的。这个问题我也向七牛技术支持提交了问题,得到的结果是使用自定义变量 mkfile 支持将自定义变量放在url中,回调的时候自定义变量可以传递给业务服务器。
慎用图片预处理
七牛云支持很多对文件的预处理,其中最常用的应该就是图片预处理了,可以对图片的大小做变换等。七牛推荐使用GET的方式直接指定图片处理结果的url,像这样:
http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200
处理后的图片会自动缓存,用户不用关心,只要每次访问都用这个url就行了。然而,笔者在开始的时候,为了保持与其他文件形式统一的处理方法,对图片使用了预处理(因为视频什么的只能预处理),即在token中指定了预处理。此时问题出现了,从后台的日志看到,图片的预处理通知回调竟然比正常的上传成功回调还要快!这就导致预处理结果到来之前,我的业务服务器的数据库中还没有这个图片,无法保存预处理结果了。所以 推荐还是使用url直接处理,对图片要慎用预处理
视频文件无法快进播放
通常用户在观看视频的时候都会根据自己的喜好,快速将视频定位到指定的时间播放。实现这个功能,需要视频本身有关键帧信息、服务端需要支持关键帧播放请求,在 这篇文章 中有详细讨论。
但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。于是咨询技术支持,得到的答案是:转化的文件是具有关键帧的,但七牛使用CDN加速,所以关键帧请求需要CDN的支持,如果想要用这个功能的话,需要单独联系销售或技术支持在CDN上配置,而且时间比较长。笔者联系了销售和技术支持,说是帮我配置,但到现在还没有搞定,因为最近这个也不是特别重要,所以也没有跟下去。
Callback校验
这是可选的一个步骤。由于七牛云会在上传完成之后回调业务服务器,所以理论上说业务服务器需要校验这个回调的合理性。原理在七牛的 文档 中有,需要用到 HMAC-SHA1 签名函数。但是七牛的sdk中没有提供直接的方式来做校验,在研读文档、多次失败和查看sdk源码后,笔者终于校验成功了。关键的分歧在于,文档中的这句话:
获取明文:data = Request.URL.Path +”\n” +Request.Body
这里的 Request.URL.Path 是否包含Querystring?答案是包含的!下面是笔者C#服务端的校验代码,使用的是ASP.NET Web Api:
```C#
byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY);
using (HMACSHA1 hmac = new HMACSHA1(key))
{
var t = filterContext.Request.Content.ReadAsStringAsync();
t.Wait();
string rawbody = t.Result;
log.DebugFormat("request's rawbody : {0}", rawbody);
string text = filterContext.Request.RequestUri.PathAndQuery + "\n" + rawbody;
log.DebugFormat("PathAndQuery + \n + rawbody : {0}", text);
byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text));
string computed = Qiniu.Util.Base64URLSafe.Encode(digest);
log.DebugFormat("Computed hash after base64 : {0}", computed);
IEnumerable<string> auths;
if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1)
{
string auth = auths.First();
log.DebugFormat("Authorization in header : {0}", auth);
if (auth.StartsWith("QBox "))
{
var arr = auth.Substring(5).Split(':');
if (arr.Length == 2)
{
if (arr[1] != computed)
{
log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed);
}
else
{
log.Debug("Authorization success.");
//only pass can be return
return;
}
}
else
{
log.Error("Callback Authorization's format is invalid, can not find two part after split by ':'.");
}
}
else
{
log.Error("Callback Authorization's format is invalid, missing leading 'QBox '.");
}
}
else
{
log.Error("The request from qiniu callback is missing 'Authorization'");
}
filterContext.Response = filterContext.Request.CreateResponse(System.Net.HttpStatusCode.Forbidden);
}
如下几个注意点:
- 明文应当是请求的path+querystring部分和rawbody
- 对于.NET而言,明文和key都需要用UTF-8编码变换成字节才能进行签名。而php中的hash_hmac函数完全不用这么复杂...
- 签名的结果再用base64的url安全的方式编码,再与请求的http头部的Authorization比较
建议官方在文档中加入一些相对底层一些的编程语言的实现,php太高端了...
## js-sdk实现略显粗糙 ##
在使用过程中,我发现[官方的js-sdk](https://github.com/qiniupd/qiniu-js-sdk/)有几个我觉得不好的地方:
**不能为每个文件获取UpToken**
试想,在文件上传过程中有获取UpToken是必须的,而且UpToken又需要包含预处理指令,不同的文件显然需要不同的UpToken,而在js-sdk的实现中,只在初始化这个上传组件对象的时候请求一次上传凭证,后面所有的上传都需要使用这个预先得到的UpToken:
```javascript
uploader.bind('Init', function(up, params) {
getUpToken();
});
于是我修改了这部分,在 BeforeUpload 事件中请求UpToken。建议官方考虑更改这个地方
只能实现分片上传,无法断点续传
js-sdk的实现在分片上传的实现上,是很简单的,不仅没有使用分片,而是分块(一块4m,调用mkblk),而且没有实现持久化ctx,或者类似的回调或接口。4m分块这个问题还可以不追究,没有实现持久化ctx就说不过去了,不持久化怎么实现断点续传撒?!就算不实现,也应该给出回调的入口,让调用者来实现持久化,而我实在无法找到这个'空子'可钻,只能直接在源码上改动了。
没有复用流行类库的东西
这个其实算不上问题,因为作为一个不依赖jquery的sdk,当然不能使用jquery现成的东西,比如ajax。不依赖jquery就算了,依赖plupload是几个意思嘛,还依赖全局对象...于是最后,我干脆自己将sdk改成了Backbone的类,将不要的东西统统去掉,使用jquery和underscore简化代码了...
⑸ 七牛云存储删除文件需要多长时间
一般情况下,提交删除命令以后会立即被删除,如果删除以后还能访问,这个是因为cdn缓存的原因,用url?v=20150211就应该能看到文件已经删除了,如果要更快速的刷新资源可以再空间设置的高级设置中,刷新一下资源的url。
⑹ 大数据撬动创新创业新契机
大数据撬动创新创业新契机
大数据被视为云计算之后的又一科技热点。从走在前沿的互联网新兴行业,到与人们生活息息相关的医疗、电力、通信等传统行业,大数据浪潮无时无刻不在改变着人们的生产生活方式。巨变之下,国内外各行各业也在面临新一轮创新创业的重大契机。
日前,上海大数据产业技术创新战略联盟(下称“上海大数据联盟”)召开数据中国产业创新峰会,并推出中国大数据最具投资价值排行榜。该联盟秘书长孔华威表示:“参与竞争此次价值排行榜的,共有近450家大数据领域创业团队,我们或许能从中发现新一代的‘马云’。”
随着大数据逐渐由概念转化为生产力,无论是企业、资本机构还是政府、行业协会或联盟,均开始积极布局大数据。之前,北京、上海、广东,甚至河北、贵州、陕西等地方政府已将大数据作为重要战略部署,并开始由松散走向组织化。河北成立秦皇岛开发区数据产业基地;贵州8月份刚刚成立大数据产业技术联盟,并正式出台文件,开放数据环境;而北京早在2012年便成立中关村大数据产业联盟。
作为经济发展重镇,上海近两年也积极推动大数据的发展。2011年,上海成立了智慧岛数据产业园;上海科委副主任干频表示,去年上海市科委正式发布了《上海推进大数据研究与发展三年行动计划(2013-2015年)》,重点推进6大行业大数据公共平台和6类大数据行业应用的发展。
孔华威表示,大数据将成为上海科技创新的重要抓手。而成立于去年的上海大数据产业技术创新战略联盟则将实施具体的推动工作,下一步将着重整合资本与产业资源,连接资本与创业公司。他认为,外界都在关注BAT,但随着产业的发展,一些创业公司也逐步崛起,应该受到更多关注。
一家名为星图数据的创业公司不久前获得数百万美元的A轮投资;著名风险投资公司IDG则以4000万元人民币投资了大数据信用评估公司Wecash闪银。毋庸置疑,大数据产业正在受到资本越来越多的关注。
从产业链角度来看,大数据主要分为三个层级:大数据的获取、大数据传输和存储、大数据应用(包括分析挖掘)。在国内,大数据获取依然集中于BAT等大型互联网公司;而在大数据传输和存储方面,已经出现一些成功的创业公司,比如提供基础云计算服务的Ucloud,今年6月份已完成B轮5000万美元的融资;更多的大数据创业公司则集中于大数据应用方面,包括刚刚获得投资的星图数据,以及一些软件公司。
但整体而言,目前基于大数据的创业公司依然处于分散、规模小的状态。孔华威表示,上海大数据联盟将发布《2014年中国大数据产业年鉴》,构建中国大数据产业图谱。
大数据企业成功路径在哪里?众人科技创始人谈剑峰表示,围绕大数据,在硬件等基础设施方面,国外的技术已经遥遥领先,像甲骨文、IBM这样的公司非常成熟,因此,国内短时间内应该先从“软”的方面入手。
目前,上海已出现一些专注大数据的公司,比如提供智慧安全及智慧交通专业解决方案博康智能、专注电商管理软件的商派、解决移动金融安全的来谊电子等。孔华威表示,大数据创新创业企业要关注快和准,因为大数据核心在于海量数据快速和精准的计算。赛富投资基金合伙人金凤春告诉记者,从产业和具体应用来看,围绕社区服务的移动电商、电子游戏的渠道拓展等领域,有可能孕育引导潮流的大数据企业。七牛云存储CEO许式伟则认为,出于对用户行为数据的精准分析,大数据时代的竞争会从“生产更多的商品”,转到“生产让客户满意的商品,甚至是定制化的商品”。未来大数据企业的商业模式之争,就是服务之争、智能化之争。
以上是小编为大家分享的关于大数据撬动创新创业新契机的相关内容,更多信息可以关注环球青藤分享更多干货
⑺ 七牛云创建域名时提示创建域名受限,这什么情况
七牛云创建域名是有数量限制的,每日创建上限个数20,域名总数上限100,你看看自己是不是超了
⑻ 七牛云储存股权的投资价值分析,IPO是否有望
我们应该从哪些方面去分析七牛云储存股权基金的投资价值呢首先要查看一下你的这个要投资项目的可行性,是否能够很好的运行,第二要看团队质量,他们的这个团队是不是很有Ji情很有规范,第三就要查看这个项目能不能给你带来效益还有就是带来效益的周期长不长,第四看与你合作的这个人可靠性怎么样,而七牛云储存已经完成了4轮融资,公司于2011年9月注册成立,同年10月获得数百万A轮融资;2013年一月获得千万美元B轮投资;2014年8月获得数千万美元C轮投资。目前七牛云储存的市场估值已经超过10亿美金。通过巨大的融资我们不难看出七牛云储存股权基金的可行性非常之高,,从合作人的角度来说天玑金服的优势巨大故而选择七牛云储存股权基金是一个正确的选择。
⑼ 如何在不强制开启 https 的情况下让 http 和 https 都能使用七牛
的网页生成了 过多的重定向。清除此网站的 Cookie 或允许第三方 Cookie 可能会解决该问题。如果 不能解决,则可能是服务器配置的问题,而不是您的 计算机有问题。我设置后自己打开网站显示这个.....问题出在那里?使用的是下面这2种方法
⑽ ios 用七牛sdk上传资源,报405错误是什么情况
相信很多开发者会把图片存放到七牛上,我的web站点也是吧图片存储到七牛上,对于以图片为主的站点,这样可以节省很大带宽。
将图片上传到七牛服务器的重点就是获得上传凭证uploadToken,直接把AccessKey和Secret放到客户端太不安全,容易被反编译。所以需要在服务器端根据AccessKey和Secret动态生成一个uploadToken,然后传回到客户端,客户端通过这个uploadToken将图片上传到七牛服务器。
第一、在服务器端生成uploadToken
//将图片上传到七牛 start
$bucket='七牛空间名称';
$expires = 3600;
$accessKey='去七牛查看';
$secretKey='去七牛查看';
$client = new QiniuClient($accessKey,$secretKey);
$flags = array();
$scope = $bucket;
$deadline = time() + $expires;
$flags['scope'] = $scope;
$flags['deadline'] = $deadline;
$flags['returnBody'] = null;
echo $client->uploadToken($flags);
这里注意一下bucket:七牛空间名称和deadline:uploadToken失效时间,具体可查看一下官网上传凭证介绍
uploadToken($flags)是自己封装的用于生成上传凭证的函数
public function uploadToken($flags) { if(!isset($flags['deadline'])) $flags['deadline'] = 3600 + time(); $encodedFlags = self::urlsafe_base64_encode(json_encode($flags)); $sign = hash_hmac('sha1', $encodedFlags, $this->secretKey, true); $encodedSign = self::urlsafe_base64_encode($sign); $token = $this->accessKey.':'.$encodedSign. ':' . $encodedFlags; return $token; }
public static function urlsafe_base64_encode($str){
$find = array("+","/");
$replace = array("-", "_");
return str_replace($find, $replace, base64_encode($str));
}
第二、下载qiniu-android-sdk-7.0.0.jar和android-async-http-1.4.6并导入项目
第三、android上传图片
由于Android4.0 以后不允许在主线程进行网络连接,所以需要新开个线程来获取上传凭证。
/*
* 上传图片到七牛
*/
private void uploadImg(){
new Thread(new Runnable(){
@Override
public void run() {
//获得七牛上传凭证uploadToken
String token=getUploadToken();
//手机SD卡图片存放路径
String imgPath="";
try {
imgPath=FileUtil.getBasePath()+ "/test.jpg";
} catch (IOException e) {
e.printStackTrace();
}
if(token!=null){
String data = imgPath;
//图片名称为当前日期+随机数生成
String key = getRandomFileName();
UploadManager uploadManager = new UploadManager();
uploadManager.put(data, key, token,
new UpCompletionHandler() {
@Override
public void complete(String arg0, ResponseInfo info, JSONObject response) {
// TODO Auto-generated method stub
Log.i("qiniu", info.toString());
}
}, null);
}
else{
Log.i("fail", "上传失败");
}
}
}).start();
}
FileUtil.getBasePath()使用来获取SD卡基本路径,getRandomFileName()生成一个随机数来命名上传图片,具体方法我在这就不写了。
获得上传凭证的方法也很简单,直接使用httpget和服务器通信,获得第一步中生成的数据即可。(注意10.0.2.2是模拟器提供的特殊IP,等同于在电脑端的环回测试IP127.0.0.1)
/*
* 获得七牛上传凭证uploadtoken
*/
private String getUploadToken()
{
HttpClient client = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
HttpGet myget = new HttpGet("");
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
return builder.toString();
} catch (Exception e) {
Log.i("url response", "false");
e.printStackTrace();
return null;
}
}
通过LOG日志可以看到Qiniu--success,说明上传成功。