文档章节

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

itfanr
 itfanr
发布于 2014/01/23 13:57
字数 490
阅读 2182
收藏 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
博文 464
码字总数 165088
作品 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
从 PostCSS 插件,体验编码到发布全过程

因项目的需求,自己动手写了一个 PostCSS 插件 postcss-px2vw,主要用于将 转成 和 , 作为回退模式。也刚好借此机会总结一下 包的发布流程,文章还会介绍到七牛云图片的使用与上传相关的技巧...

红颜漠
08/27
0
0
如何使用七牛给自己的网站加速?

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

modernizr
2014/11/14
426
0
个人博客系统--newBlog

newBlog 是一个基于 Django 框架开发的个人博客系统,开发环境 Python 2.7 Django 1.5.5 Mysql 5.5 Boostrap 功能 1.写博(基于Markdown编辑器) 2.上传博客(将.md文件上传后自动生成博客,如...

tube
2014/12/18
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

利用责任链模式设计一个拦截器

前言 近期在做 Cicada 的拦截器功能,正好用到了责任链模式。 这个设计模式在日常使用中频率还是挺高的,借此机会来分析分析。 责任链模式 先来看看什么是责任链模式。 引用一段维基百科对其...

编程SHA
5分钟前
0
0
IDE,SATA,SCSI,SAS,FC,SSD说明与区别

DE是俗称的并口,SATA是俗称的串口,这两种硬盘是个人电脑和低端服务器常见的硬盘。SCSI是”小型计算机系统专用接口”的简称,SCSI硬盘就是采用这种接口的硬盘。SAS就是串口的SCSI接口。一般...

mskk
8分钟前
0
0
MySQL面试题集锦

什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构。一个非常恰当的比喻就是书的目录页与书的正...

老道士
43分钟前
0
0
使用 LogStash 归集日志

elastic 官网: https://www.elastic.co/ 为了便于集中查看多台主机的业务日志,使用 Filebeat, Redis, Logstash的方式进行收集: (1) Filebeat 监控日志文件的变化, 将新增部分写入redis中, 每...

ouhoo
46分钟前
0
0
java序列化(六) - protostuff序列化

添加依赖 <dependency> <groupId>io.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.5.9</version> </de......

晨猫
53分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部