文档章节

计划用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
粉丝 114
博文 465
码字总数 165215
作品 1
济南
程序员
私信 提问
加载中

评论(3)

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

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

技术小疯子
07/26
0
0
如何使用七牛给自己的网站加速?

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

modernizr
2014/11/14
677
0
写markdown博客如何将截图快速上传到图床——记一个工具插件的实现

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

harlanc
2017/05/31
0
0
基于七牛云接口的视频播放器实现

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

不洗碗工作室
01/30
0
0
从 PostCSS 插件,体验编码到发布全过程

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

红颜漠
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在10分钟内设置EOS钱包和帐户?

由于SuperNode超级节点社区建立在EOS之上,我们希望引导我们的社区成员设置EOS钱包和帐户,以便充分参与我们的生态系统。 虽然设置过程可能不如其他区块链系统那么简单,但不要担心。本指南旨...

笔阁
9分钟前
0
0
8.04-Win10非U盘重装系统

注意:最好准备一个你所需版本的秘钥(不能是数字0开头的) 【所需:Win10的ISO镜像、能够解压ISO格式的解压缩工具、最好准备你所需版本的秘钥(不能是数字0开头的)】 1、创建新的文件系统为...

静以修身2025
10分钟前
0
0
Docker的架构与自制镜像的发布

一. docker 是什么 大家都知道虚拟机吧,windows 上装个 linux 虚拟机是大部分程序员的常用方案。公司生产环境大多也是虚拟机,虚拟机将物理硬件资源虚拟化,按需分配和使用,虚拟机使用起来...

程序猿拿Q
26分钟前
4
0
ubuntu下pycharm调用Hanlp实践分享

前几天看了大快的举办的大数据论坛峰会的现场直播,惊喜的是hanlp2.0版本发布。Hanlp2.0版本将会支持任意多的语种,感觉还是挺好的!不过更多关于hanlp2.0的信息,可能还需要过一段时间才能看...

左手的倒影
35分钟前
2
0
Python监控服务器实现邮件微信报警[未测试]

本文中笔者暂时实现的只有cpu和内存的监控,python可以监控许多的主机信息,网络,硬盘,机器状态等,以下是代码的实现,代码可以实现windows和linux的监控。 实验环境:Ubuntu16.04和windo...

dragon_tech
40分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部