文档章节

只有100多行PHP 代码的七牛云离线下载

守望辰峰
 守望辰峰
发布于 2016/05/08 20:53
字数 587
阅读 166
收藏 6

下载谷歌上面的android studio的程序包,速度实在太慢了。 然后弄了个 php+shell 脚本的七牛云下载和 for codeigniter 版本的。 今天又花了点时间来整理成 PHP 的。(PS:有个写法是用??这种 PHP7的新特征,可自行修改成 PHP5的)

首发于:https://www.zzzzy.com/201605084032.html
持续更新 Github: https://github.com/skiy/dev/blob/master/api/qiniu.php

<?php
/**
 * 七牛云离线下载
 * qiniu.php
 * @author  : Skiychan <dev@skiy.net>
 * @link    : https://www.zzzzy.com
 * @created : 5/8/16
 * @modified:
 * @version : 0.0.1
 * @doc     : https://www.zzzzy.com/201605084032.html
 * 用了点 PHP7的新特征:?? 和 PHP5高版本的 [] 代替 array(),可自行修改
 */

$thisPage = basename($_SERVER['PHP_SELF']);

if (empty($_POST)) {
    ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>七牛云离线下载</title>
        <style>
            input {
                display: block;
            }
            input[type=text] {
                width: 360px;
            }
        </style>
    </head>
    <body>
    <form action="<?php echo $thisPage; ?>" method="post">
        <input type="text" name="url" id="url" placeholder="请输入链接" required>
        <input type="text" name="name" id="name" placeholder="请输入保存的文件名">
        <input type="submit" name="submit" value="提交">
    </form>
    </body>
    </html>

    <?php
    die;
}

$url = $_POST['url'] ?? "";  //PHP7
//$url = isset($_POST['url']) ? $_POST['url'] : "";  //PHP5

if (empty($url)) {
    header("Location: ".$thisPage);
}

function urlsafe_base64_encode($data) {
    $find = array('+', '/');
    $replace = array('-', '_');
    return str_replace($find, $replace, base64_encode($data));
}

function hmac_sha1($str, $key) {
    return hash_hmac("sha1", $str, $key, true);
}

//七牛云配置,请到七牛云上面申请帐号并填写密钥和bucket
define("AccessKey", "AccessKey_12345689");
define("SecretKey", "SecretKey_98764231");
define("BUCKET", "Your bucket");
define("HOST", "http://iovip.qbox.me");
define("DOMAIN", "Your domain");

$uploadFormat = "%s/fetch/%s/to/%s";
$encodeURI = urlsafe_base64_encode($url);

if (! empty($_POST['name'])) {
    $entry = BUCKET.':'.$_POST['name'];
} else {
    $entry = BUCKET.':'.time()."_".explode('?', basename($url))[0];
}

$encodedEntryURI = urlsafe_base64_encode($entry);

$uploadURL = sprintf($uploadFormat, HOST, $encodeURI, $encodedEntryURI);

$parse = parse_url($uploadURL);
$path = $parse['path'];
$signingStr = isset($parse['query']) ? $path."?".$parse['query']."\n" : $path."\n";

$sign = hmac_sha1($signingStr, SecretKey);
$encodedSign = urlsafe_base64_encode($sign);

$accessToken = AccessKey.":{$encodedSign}";

$headers = [
    "Authorization: QBox ".$accessToken,
    "Content-Type: application/x-www-form-urlencoded",
];

$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $uploadURL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
curl_close($ch);

$data_obj = json_decode($data);

if (isset($data_obj->error)) {
    echo "下载失败,<a href='javascript: history.back(-1)'>返回上一页</a>";
} else {
    $data_obj->key = DOMAIN.$data_obj->key;
    echo "下载成功,您的下载地址为:<a href='{$data_obj->key}' target='_blank'>{$data_obj->key}</a><br /><a href='javascript: history.back(-1)'>返回上一页</a>";
    //echo json_encode($data_obj);
}

© 著作权归作者所有

共有 人打赏支持
守望辰峰
粉丝 14
博文 50
码字总数 9618
作品 0
深圳
程序员
七牛云储存:最好的 WordPress 静态文件CDN加速方案

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

modernizr
2014/12/17
702
0
《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

两个月前的发布的博客《介绍一款开源的类Excel电子表格软件》引起了热议:在博客园有近2000个View、超过20个评论。 同时有热心读者电话咨询如何能够在SpreadDesing中实现存储Excel云文件,既...

葡萄城控件技术团队
2014/12/11
0
0
Qiniu PHP SDK

这是七牛云储存的 PHP 客户端开发包。 此 SDK 适用于 PHP 5.1.0 及其以上版本。基于 七牛云存储官方API 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七...

小编辑
2014/09/11
744
0
七牛镜像存储 WordPress 插件:一键实现 WordPress 博客静态文件 CDN 加速

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

Amamatthew
2014/08/19
0
0
2017年易软天创“组团拜年”活动圆满收官

由青岛易软天创牵头筹划,SendCloud、开源中国社区、ipip.net、国亿国际、Seafile、迅思威尔、七牛云和好雨参加的2017年“组团拜年”活动顺利,圆满结束了。(以上排名不分先后) 本次“组团...

开源春哥
2017/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

咕泡-Factory设计模式笔记

个人感悟: 设计模式都是处理复杂问题的,如果问题本身很简单,使用设计模式反而累赘,增加了开发的复杂性 遇到最简单的情况,直接 new 如果创建对象的过程简单,但是需要匹配不同情况,返回...

职业搬砖20年
18分钟前
0
0
Java中的锁分类

在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏...

Funcy1122
26分钟前
0
0
Ansible随机数

想为你的Ansible剧本取一个随机数?还想在接下来的运行中保持系统的等幂性?这里有一个答案。 假如,你要为一大批服务器设置cron任务,却不想让它们同时启动,你可以这样设置分钟数: minute...

大别阿郎
35分钟前
0
0
SpringCloud之服务注册中心Eureka

本系列介绍的配置均基于 Spring Boot 2.0.1.RELEASE 版本和 Spring Cloud Finchley.SR1 服务注册中心 Spring Cloud 已经帮我们实现了服务注册中心,我们只需要很简单的几个步骤就可以完成。 ...

熊小飞呀
今天
9
1
“Comparison method violates ...”异常的再现方法

前提条件:JDK8 代码: import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Test { public stat......

hunterli
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部