使用七牛进行文件上传可以有多种方式:

  1. 直接form表单上传,需要自己按照文档做配置
  2. 使用七牛jssdk,部署较简单,大文件分片上传
  3. php-sdk后台上传

首先,所有的上传方法以及所有的跟七牛接口相关的操作,基本都离不开token,所以首先必须先获取token。

下载七牛的php-sdk, 放到项目目录,有一点提一下,七牛的php-sdk并没有加入命名空间,所以要应用到自己的框架中,需要更添加一下命名空间。

然后,需要获取token需要先获取auth:

note:accessKey与secretKey需要自己注册并在七牛开发者中心获取

public function getAuth()
{
$model = new \backend\models\QiniuKey();
$key = $model->getKey();
$accessKey = $key['accessKey'];
$secretKey = $key['secretKey'];
//安全起见,accessKey 与 secretKey 存放数据库
$auth = new Auth($accessKey, $secretKey);
return $auth;
}

然后获取上传的uploadToken:

public function getUptoken($bucketName)
{
header('Access-Control-Allow-Origin:*');
$bucket = $bucketName; //七牛bucketname
$auth = $this->getAuth();
$upToken = $auth->uploadToken($bucket);
return $upToken;
}

如果以form表单的方式上传,只要action指定为http://upload.qiniu.com/,以及包含name为token的input 表单,对于资源文件的别名,可以在调用uploadToken的时候,指定第二参数key;以及上传的结果,可以指定第三个参数policy中,也就是上传策略中指定callbackUrl,上传成功,七牛会请求指定的回调地址,返回信息包括code与hash就是上传文件的文件名(你指定的key或者七牛生成的唯一的hash值)。

使用php-sdk上传

这种上传方式,适用于图片已经上传到了我们的服务器的情况,因为上传需要指定文件的路径。一般情况,key值会指定为时间戳加4位随机数的形式来命名。

需要用到sdk中的UploadManager这个类

/**
* 本地文件上传七牛 wyq add type 方便直接打开文件
* @param $filePath 本地文件的路径(真实的物理路径)
*/
public function uploadToQiniu($filePath,$type="")
{
/* @param $upToken 上传凭证
* @param $key 上传文件名
* @param $filePath 上传文件的路径
* @param $params 自定义变量,规格参考
* http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
* @param $mime 上传数据的mimeType
* @param $checkCrc 是否校验crc32
*/
$uploadManager = new UploadManager;
$upToken = $this->getUptoken($bucketName); if(empty($type)){
$key = time().rand(1000,9999);
}else{
$key = time().rand(1000,9999).".".$type;
}
$mimeType = $this->getMimeType($filePath); $res = $uploadManager->putFile($upToken,$key,$filePath,null,$mimeType); if($res[0] != null){
$url = 'http://'.$this->qiniu_image_domain.'/'.$key;//七牛文件的链接(前提是公开bucket)
return $url;
}else{
return false;
}
}

获取文件minetype的代码也放上来:

/**
* 获取一个文件mime-Type
* @param $filePath 文件路径
*/
public function getMimeType($filePath)
{
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filePath);
finfo_close($finfo);
return $mime;
}

上传成功就可以将返回的url进行保存或者显示了。如果返回的false,,就需要debug一下,查看$res的错误信息。

使用js-sdk上传

有了jssdk就没必要再使用第一种表单的上传方式了。首先下载jssdk

然后将资源文件放到我们的js资源目录下,先进行css与js文件的引入。因为这个上传组件是基于plupload做的,所以要引入的文件包括:

main.css
highlight.css
//plupload需要的js
plupload.full.min.js
ui.js
//sdk
qiniu.js
//多文件上传
multiple.js
//单文件上传
main.js

引入完之后,需要做的一点配置就是,打开main.js,有一个uptoken_url项,也就是如同上面的方式一样,上传需要使用uploadToken,所以我们在这里指定一个url地址,sdk会自动请求这个地址,我们在这个地址中做的操作就是返回token,echo json_encode(['uptoken' => 'token字符串']);

如果要自定义样式,以及上传文件过程的效果,需要阅读源码来更改,这个sdk没有提供样式以及状态修改的选项。

另外的一种上传方式,之前有介绍过,就是基于uploadify(也是一个上传文件用的js插件)与七牛的结合使用,可以点击前往查看

更多用法,欢迎留言讨论。

七牛php-sdk使用-文件上传的更多相关文章

  1. Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案

    import java.io.File;   import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile ...

  2. 性能测试七:jmeter进阶之文件上传下载、定时器

    一.上传下载 上传: 1,POST请求,勾选 use …for post 2,同请求一起发送文件里,填写文件名称,参数名称 3,MIME类型: application/octet-stream(非必须 ...

  3. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  4. Java进阶学习:将文件上传到七牛云中

    Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...

  5. .Net Core实现将文件上传到七牛云存储

    功能:将图片上传到七牛云存储 准备工作 注册七牛账号,提交实名认证(基本上1天内内审核通过) 登录七牛后台->对象存储->新建空间 (基本概念:https://developer.qini ...

  6. 七牛云存储的 Javascript Web 前端文件上传

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,七牛云存储的 Web 前端文件上传 七牛是不错的云存储产品,特别是有免费的配额可 ...

  7. 七牛云存储 qiniu 域名 回收 文件上传 备份 下载 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传

    背景起,有奏乐: 有伟人曰:学习技能的最好途径莫过于理论与实践相结合. 初学Node这货时,每每读教程必会Fall asleep. 当真要开发系统时,顿觉精神百倍,即便踩坑无数也不失斗志. 因为同团队 ...

  9. laravel中的文件上传到本地+七牛云上传

    首先在filesystems.php 配置好上传的文件的目录起名为upload 在Storage/目录下面 目录下面的app/upload 如果没有这个文件会自动创建 这里的名字upload名字是跟控 ...

随机推荐

  1. angular自定义分页组件(实用)

    功能描述:分页,点击按钮或者下一页获取分页接口,同时active到对应页码. html模块: <page page-count="totalPage" on-click-pa ...

  2. CNN中的卷积操作的参数数计算

    之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积.比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8* ...

  3. POST/有道翻译 有bug

    1.发现在翻译时地址没有变,那是POST请求. 2.通过fidder抓包工具抓取url 3.对data分析,发现每次salt和sign都在变化. 4.查看源码,先用站长工具http://tool.ch ...

  4. vue-cli+webpack打包配置

    vue-cli+webpack打包配置 一: 目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── ut ...

  5. iOS 工程默认只允许竖屏,在单独界面进行横竖转换,屏幕旋转

    只含有 .关于横竖屏的代码 #import "InspectionReportViewController.h" #define SCREEN_WIDTH ([UIScreen m ...

  6. 通过EntityFramework来操作MySQL数据库

    自己首次用到了EF,为了利人利己,故将自己今天学的记录下来. 这个项目要用到的工具是VS2015.MySQL5.7.12 . 首先我们先建一个解决方案,里面建两个项目分别是Silentdoer.Mai ...

  7. csdn博客被删除联系客服恢复

    前几天写了篇"如何使用shadowsocksFQ",居然被删除,我很郁闷,客服给我的回答是"影响了客户体验,网安查的严,不能带有FQ的信息出现" 我一直很郁闷, ...

  8. JS画几何图形之一【直线】

    JS画图的想法经过大脑的时候,觉得有点意思,所以就实践了一番.JS画图为系列文章,本是讲点.线和面 先看样例:http://www.zhaojz.com.cn/demo/draw5.html 一.点 ...

  9. 关于git的一些理论知识

    一.什么是版本控制器 好多刚用git的coder一说起git,就随口会说出版本控制器嘛,我问那是干嘛的,大部分人就回答上传代码的.然后会用,但是有些理论你问他们他们就不知道了,比如不是代码的文件就不能 ...

  10. js 变量、作用域和内存问题

    基本类型和引用类型 5种基本类型:undefined.null.boolean.number.string 引用类型:由多个值构成的对象 属性 引用类型可以动态添加属性,而基本类型不可以 var p ...