文档章节

计划用php写一个七牛文件上传小工具

itfanr
 itfanr
发布于 2014/01/23 13:57
字数 490
阅读 2179
收藏 2

功能

输入框中填入:bucket   Access Key 和 Secret Key 

点击提交后,向七牛服务器认证,若认证通过,则在当前页面动态刷新,刚才的输入框消失。

显示一个上传文件按钮,点击可继续添加文件(最多同时上传5个)。文件的key为yyy-mm-dd-hh-name.xxx

然后提交文件后显示进度条,并在下面动态回显上传文件的结果以及文件的url。

七牛API

上传策略

{
    "scope":               "<Bucket                   string>",
    "deadline":             <UnixTimestamp            int64>,
    "endUser":             "<EndUserId                string>",

    "returnUrl":           "<RedirectURL              string>",
    "returnBody":          "<ResponseBodyForAppClient string>",

    "callbackBody":        "<RequestBodyForAppServer  string>",
    "callbackUrl":         "<RequestUrlForAppServer   string>",

    "persistentOps":       "<persistentOpsCmds        string>",
    "persistentNotifyUrl": "<persistentNotifyUrl      string>",

    "insertOnly":          "<AllowFileUpdating        uint16>",
    "detectMime":          "<AutoDetectMimeType       uint16>",
    "fsizeLimit":          "<FileSizeLimit            int64>",
    "saveKey":             "<KeyFomart                string>",

    "mimeLimit":           "<MimeLimit                string>"
}

其中scope和deadline为必选。

上传凭证

1.构造上传策略
2.将上传策略序列化成为JSON格式
3.对JSON编码的上传策略进行URL安全的Base64编码,得到待签名字符串:
encodedPutPolicy = urlsafe_base64_encode(putPolicy)
4.使用SecertKey对上一步生成的待签名字符串计算HMAC-SHA1签名
sign = hmac_sha1(signingStr, "<SecretKey>")
5.对签名进行URL安全的Base64编码:
encodedSign = urlsafe_base64_encode(sign)
6.将AccessKey、encodedSign和encodedPutPolicy用:连接起来:
uploadToken = AccessKey + ':' + encodedSign + ':' + encodedPutPolicy

表单上传(POST方式)

<form method="post" action="http://up.qiniu.com/"
 enctype="multipart/form-data">
  <input name="key" type="hidden" value="<resource_key>">
  <input name="x:<custom_name>" type="hidden" value="<custom_value>">
  <input name="token" type="hidden" value="<upload_token>">
  <input name="file" type="file" />
</form>

token和file为必选,token指的是上传凭证,file为文件本身

反馈

PHP实现

服务端生成上传凭证

require_once("qiniu/rs.php");

$bucket = 'phpsdk';
$accessKey = '<YOUR_APP_ACCESS_KEY>';
$secretKey = '<YOUR_APP_SECRET_KEY>';

Qiniu_SetKeys($accessKey, $secretKey);
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
$upToken = $putPolicy->Token(null);

上传本地文件

require_once("qiniu/io.php");
require_once("qiniu/rs.php");

$bucket = "phpsdk";
$key1 = "file_name1";
$accessKey = '<YOUR_APP_ACCESS_KEY>';
$secretKey = '<YOUR_APP_SECRET_KEY>';

Qiniu_SetKeys($accessKey, $secretKey);
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
$upToken = $putPolicy->Token(null);
$putExtra = new Qiniu_PutExtra();
$putExtra->Crc32 = 1;
list($ret, $err) = Qiniu_PutFile($upToken, $key1, __file__, $putExtra);
echo "====> Qiniu_PutFile result: \n";
if ($err !== null) {
    var_dump($err);
} else {
    var_dump($ret);
}

参考

  • [1]:http://developer.qiniu.com/docs/v6/api/reference/security/upload-token.html

  • [2]:http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html

© 著作权归作者所有

共有 人打赏支持
itfanr
粉丝 115
博文 452
码字总数 162147
作品 1
济南
程序员
加载中

评论(3)

顾恩礼
顾恩礼
0
猿哥
猿哥
点个赞
kslr
kslr
支持,我刚好在想用来管理文件
企业数据云备份——七牛云(linux、windows)

企业数据云备份——七牛云(linux、windows) 一、七牛云介绍 七牛云,在国内是一个比较出名云平台,很多人、公司,或多或少也使用过七牛云来备份文件。对七牛云来说,它主要给用户提供了无限...

技术小疯子
07/26
0
0
写markdown博客如何将截图快速上传到图床——记一个工具插件的实现

更新于2018年2月 做了以下改动: 1.修复了一个bug,把服务器区域做成可配: 七牛有华北,华东,华南以及美国三个服务器区域,根据自己的情况进行相应的选择即可。 2.把插件打包进了exe安装包...

harlanc
2017/05/31
0
0
如何使用七牛给自己的网站加速?

如何使用七牛给自己的网站加速?或者说,如何使用七牛云存储的 CDN? 如果你恰巧问这样的问题,可能是因为你对七牛云存储所能提供的服务不太了解。七牛云存储提供三大服务:云存储、上传/下载...

modernizr
2014/11/14
426
0
基于七牛云接口的视频播放器实现

不洗碗工作室--hanxiao 转载请标明出处 文章背景:这两天在研究网课系统,最终卡在了播放器的带宽问题上,用了一些网上的开源项目,但是用CDN加速效果不理想,导致播放视频的用户体验很差,于...

不洗碗工作室
01/30
0
0
七牛云储存:最好的 WordPress 静态文件CDN加速方案

七牛云存储是由七牛提供的在线存储服务,通过云端接口向企业客户提供网上无限存储空间,和传统的云存储服务(如 Amazon S3、又拍云存储)不同,七牛云存储还增加了上传下载传输加速以及富媒体...

modernizr
2014/12/17
702
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

arts-week5

Algorithm 824. Goat Latin - LeetCode 152. Maximum Product Subarray - LeetCode 110. Balanced Binary Tree - LeetCode 67. Two Sum II - Input array is sorted - LeetCode 665. Non-dec......

yysue
11分钟前
0
0
iOS开发之AddressBook框架详解

iOS开发之AddressBook框架详解 一、写在前面 首先,AddressBook框架是一个已经过时的框架,iOS9之后官方提供了Contacts框架来进行用户通讯录相关操作。尽管如此,AddressBook框架依然是一个非...

珲少
41分钟前
1
0
两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践

Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot...

Java填坑之路
今天
3
0
《Spring5学习》04 - 面向切面编程

一、Spring面向切面编程的基本概念 面向切面编程(即AOP):把项目中需要再多处使用的功能比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。 横切关注...

老韭菜
今天
2
0
day61-20180819-流利阅读笔记

跑道没了,它们还在跑:澳门赛狗业的遗孤 Daniel 2018-08-19 1.今日导读 相信你早就知道香港有个赛马会,可是你听说过香港的邻居澳门原本有个赛狗会吗?其实,对于澳门人来说,赛狗这项活动历...

aibinxiao
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部