七牛获取上传视频时长云上传两种图片怎么分别获取

使用Element UI框架(基于vue2.0)的upload组件上传图片至七牛云整体流程如下:下面我们开始具体的流程:一、写一个后台接口,用于生成七牛token这里我使用的是python的tornado框架写的该接口,接口路由地址:/qiniu/upload/getToken如果,你的前端和后台项目不是部署在一台服务器上或者部署在一台服务器上端口号不同的情况下,你需要考虑到跨域问题,python后台接口设置允许跨域的简单配置如下:二、 在前端页面引入upload组件
官网地址 下面针对使用该组件上传图片至七牛云时,几个参数对应的说明action 必选参数, 上传的地址。 此参数我们需要填写的是七牛云接收文件的地址,此处固定为七牛的华东一区域名://,还有其他几个域名可使用,详见下图 或before-upload 可选参数, 上传文件之前的钩子,携带的参数为上传的文件filedata
可选参数, 上传时附带的额外参数file-list 上传的文件列表三、在前端页面的before-upload钩子函数中获取token, 并绑定到上传时携带的data属性:包括key和token两个字段在这个钩子函数里我们可以通过参数file获取到图片的原始文件名及属性信息,自定义一个上传时需要的文件名key,然后调用后台接口获取到token, 填充到该upload组件data属性中,在上传file时,一并上传其中API.getImageToken(key)方法是使用的vue2.0官方推荐的网络库axios,请自行安装四、通过该组件上传图片,即可在handleSuccess钩子中接收到上传成功的回调,包含key和hash两个字段617 条评论分享收藏文章被以下专栏收录Python Tornado 微信公众号开发博主录制的Python3爬虫视频教程已发布!详情请戳!希望大家支持!非常感谢!
> PHP使用七牛云存储之图片的上传、下载、重定向教程
网上关于七牛云存储的教程除了官网上的API文档,其他的资料太少了。研究了下API之后,现在已经能实现图片的上传和下载及上传之后的重定向。
首先本篇文章实现的功能如下:
1.利用表单上传功能,用户可以点击选择文件按钮,选择本地的一个文件,同时设定上传的图片的名称,点击上传按钮可以上传并存储到七牛云存储。
2.在点击上传时会检测文件的后缀名,限制为jpg和png格式存储。
3.上传成功后跳转到自己设定的一个URL,并传回文件信息,如文件名。而不是显示七牛白花花的json显示页面。
好啦,那我们开始吧,首先我们要有一个七牛云存储账号,如果没有的就自己去申请吧。
七牛云存储传送门:http://www.qiniu.com/
一.SDK下载
https://github.com/qiniu/php-sdk/tags
戳这个网址下载一下SDK吧,里面封装了文件上传下载等等的方法,我们引入之后可以直接调用。
SDK之中有一个qiniu的文件夹,这是所有的SDK实货,这个是最重要的。我们首先要把这个文件夹及里面的文件放到项目文件夹中,比如我放到这里。
大家可以看到有一个qiniu文件夹。好啦,资源支持就是这样。接下来我们要实现代码咯。
二.文件的上传。
1.首先把你七牛云存储的密钥照出来,点击账号设置可以看到有一个AccessKey和SecretKey,留着备用。
2.上传凭证生成。
在这里我们首先要引入rs.php文件,自己找一对应路径,代码如下:
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
dirname()是指的绝对路径,有时相对路径会出现问题,建议在前面加上dirname方法获取绝对路径。
require_once是引入文件,表示该文件只引入一次。
然后,传入你的AccessKey和SecretKey
代码如下:
$accessKey = 'Imn35KC5pRX7Ov3scxbYkvNk6oIx7zWsBRp16';
//换成你自己的密钥
$secretKey = 's29vc9tlCvs23wRh7QScYTuzCDmEroKj1ddssz';
//换成你自己的密钥
Qiniu_SetKeys($accessKey, $secretKey);
$accessKey = 'Imn35KC5pRX7Ov3scxbYkvNk6oIx7zWsBRp16';&&//换成你自己的密钥$secretKey = 's29vc9tlCvs23wRh7QScYTuzCDmEroKj1ddssz';&&&&//换成你自己的密钥Qiniu_SetKeys($accessKey, $secretKey);
然后建一个上传策略对象,将你的bucket 传入,bucket 就是你的空间名。
$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
$bucket = 'designpartners';$putPolicy = new Qiniu_RS_PutPolicy($bucket);
然后调用此方法来生成上传凭证。
$upToken = $putPolicy-&Token(null);
$upToken = $putPolicy-&Token(null);
接下来就写一个html表单
&form method="post" action="http://up.qiniu.com" name = "form" enctype="multipart/form-data"&
&input type="hidden"
id="token" name="token"
value=&?php echo $upToken?&&
&label for="key"&key:&/label&
&input name="key" value=""&
&label for="bucket"&照片:&/label&
&input name="file"
type="file" /&
&input type="submit" value="提交" &
12345678910111213141516
&form method="post" action="http://up.qiniu.com" name = "form" enctype="multipart/form-data"&&&&&&ul&&&&&&&&&&&&&&input type="hidden"&&id="token" name="token"&&value=&?php echo $upToken?&&&&&&&&&&&li&&&&&&&&&&&&&&label for="key"&key:&/label&&&&&&&&&&&&&&input name="key" value=""&&&&&&&&&&/li&&&&&&&&&&li&&&&&&&&&&&&&&label for="bucket"&照片:&/label&&&&&&&&&&&&&&input name="file"&&type="file" /&&&&&&&&&&/li&&&&&&&&&&li&&&&&&&&&&&&&&input type="submit" value="提交" &&&&&&&&&&/li&&&&&&/ul&&/form&
action 就填写 up.qiniu.com,表单提供了一个输入框key,用来输入你想保存的图片名称,上传到七牛之后就是这个名字。
然后一个文件选择,一个提交按钮。运行结果如下:
输入key值和选择照片即可实现照片的上传。哈哈哈有没有很简单。
三、文件下载
原理和文件上传功能相仿。
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
声明你的七牛云存储域名和两个密钥以及向下载的文件名称
$key = '00000';
$domain = 'designpartners.qiniudn.com';
$accessKey = 'IOImn35KC5p3scxbYkvNk6oIxB7zWsBRp16';
$secretKey = 's29vc9tlCvs23wCDmIbUSi4EroKj1z';
$key = '00000';$domain = 'designpartners.qiniudn.com';$accessKey = 'IOImn35KC5p3scxbYkvNk6oIxB7zWsBRp16';$secretKey = 's29vc9tlCvs23wCDmIbUSi4EroKj1z';
注意:1.key值即为文件名,不要加后缀
2.domain即为bucket加上qiniudn.com,例子中的designpartners就是我在上传图片时用的bucket名。
3.accessKey和secretKey换成你自己的,直接用我的不行的..因为我修改了.
Qiniu_SetKeys($accessKey, $secretKey);
$baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);
$getPolicy = new Qiniu_RS_GetPolicy();
$privateUrl = $getPolicy-&MakeRequest($baseUrl, null);
echo $privateUrl . "\n";
Qiniu_SetKeys($accessKey, $secretKey);&&$baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);$getPolicy = new Qiniu_RS_GetPolicy();$privateUrl = $getPolicy-&MakeRequest($baseUrl, null);echo $privateUrl . "\n";
传入这四个值即可生成一样url,直接访问url即可实现图片的下载。
在引入图片时直接
&img src = "&?php echo $privateU ?&"/&
&img src = "&?php echo $privateUrl; ?&"/&
即可引入图片咯,很简单的吧。
四、303重定向
在上面的方法中,我们上传图片成功后跳转到up.qiniu.com下,会显示白白的网页,显示一个json字符串,但是在实际网站开发中我们肯定 不能让用户看到这种网页,所以我们用到了303跳转。SDK中也为我们封装了这个方法。使用其实非常简单。在上传文件的代码中添加两行代码即可
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
$putPolicy-&ReturnUrl = site_url()."/upload/receiveInfo";
$putPolicy-&ReturnBody='{"key": $(key)}';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);$putPolicy-&ReturnUrl = site_url()."/upload/receiveInfo";$putPolicy-&ReturnBody='{"key": $(key)}';
注意:1. ReturnUrl和ReturnBody必须指定,并且首字母要大写,很多人都小写开头,这样会跳转不成功。
2.ReturnUrl必须是一个公网可以访问的网址,在本地测试是不可能通过的。比如你写成localhost,七牛服务器是定位不到的。
3.这个ReturnUrl的链接后会跟着一个?upload_ret=XXX,可以用get方法获取这个upload_ret。upload_ret的内容是base64安全编码的json形式的key值。
值的解析:比如我上传的文件名是555
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=
网址后缀如上所示,把那个upload_ret复制下来,用base64解码可以出现如下结果:
{"key": "555"}
{"key": "555"}
所以,我们要获取555这个值的代码如下,即解析代码如下:
$upload_ret = $_GET['upload_ret'];
$json_ret = base64_decode($upload_ret);
$result=json_decode($json_ret);
echo "key".$result-&
$upload_ret = $_GET['upload_ret'];$json_ret = base64_decode($upload_ret);$result=json_decode($json_ret);echo "key".$result-&key;
好啦,获取到这个key值之后,你可以选择存到数据库或者进行其他的操作咯。
五、上传前文件类型的验证
我们可以用js来验证文件的后缀名,
在form的属性里加上
onsubmit="return isValidateFile('file');"
onsubmit="return isValidateFile('file');"
加上一个js方法
function isValidateFile(obj) {
var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);
if (extend == "") {
alert("请选择头像");
if (!(extend == "jpg" || extend == "png")) {
alert("请上传后缀名为jpg或png的文件!");
12345678910111213141516
&script&&&&&function isValidateFile(obj) {&&&&&&&&var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);&&&&&&&&if (extend == "") {&&&&&&&&&&&&alert("请选择头像");&&&&&&&&&&&&return false;&&&&&&&&}&&&&&&&&else {&&&&&&&&&&&&if (!(extend == "jpg" || extend == "png")) {&&&&&&&&&&&&alert("请上传后缀名为jpg或png的文件!");&&&&&&&&&&&&return false;&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&return true;&&&&}&/script&
即可验证它的类型是否合法。
附:CI代码实现:
获取Uptoken:
function getUptoken(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
//远程存储空间名称
$bucket = 'designpartners';
$accessKey = 'IOImn35KCRX7Ov3scvNk6oIxB7zWsBRp16';
$secretKey = 's29vc9tlCvs23wRhTuzCDmIbUSi4EroKj1z';
Qiniu_SetKeys($accessKey, $secretKey);
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
echo site_url();
$putPolicy-&ReturnUrl = site_url()."/upload/receiveInfo";
$putPolicy-&ReturnBody='{"key": $(key)}';
$upToken = $putPolicy-&Token(null);
return $upT
1234567891011121314
function getUptoken(){&&&&&&&&require_once(dirname(__FILE__)."/../../qiniu/rs.php");&&&&&&&&//远程存储空间名称&&&&&&&&$bucket = 'designpartners';&&&&&&&&$accessKey = 'IOImn35KCRX7Ov3scvNk6oIxB7zWsBRp16';&&&&&&&&$secretKey = 's29vc9tlCvs23wRhTuzCDmIbUSi4EroKj1z';&&&&&&&&Qiniu_SetKeys($accessKey, $secretKey);&&&&&&&&$putPolicy = new Qiniu_RS_PutPolicy($bucket);&&&&&&&&echo site_url();&&&&&&&&$putPolicy-&ReturnUrl = site_url()."/upload/receiveInfo";&&&&&&&&$putPolicy-&ReturnBody='{"key": $(key)}';&&&&&&&&$upToken = $putPolicy-&Token(null);&&&&&&&&return $upToken;&&&&}
文件上传:
public function uploadPic(){
$upToken = $this-&getUptoken();
$data['upToken'] = $upT
$this-&load-&view('upload',$data);
public function uploadPic(){&&&&&&&&&&&&&&&&$upToken = $this-&getUptoken();&&&&&&&&&&&&$data['upToken'] = $upToken;&&&&&&&&$this-&load-&view('upload',$data);&&&&&&&&&&&&}
303重定向解析:
public function receiveInfo(){
$upload_ret = $_GET['upload_ret'];
$json_ret = base64_decode($upload_ret);
$result=json_decode($json_ret);
echo "key".$result-&
public function receiveInfo(){&&&&&&&&$upload_ret = $_GET['upload_ret'];&&&&&&&&$json_ret = base64_decode($upload_ret);&&&&&&&&$result=json_decode($json_ret);&&&&&&&&echo "key".$result-&key; &&&&}
文件下载:
public function downloadPic(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
$key = '00000';
$domain = 'designpartners.qiniudn.com';
$accessKey = 'IOImn35KC57Ov3scxbYkvNk6oIxB7zWsBRp16';
$secretKey = 's29vc9tlCvsh7QScYTuzCDmIbUSi4EroKj1z';
Qiniu_SetKeys($accessKey, $secretKey);
$baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);
$getPolicy = new Qiniu_RS_GetPolicy();
$privateUrl = $getPolicy-&MakeRequest($baseUrl, null);
echo "====& getPolicy result: \n";
echo $privateUrl . "\n";
12345678910111213
public function downloadPic(){&&&&&&&&require_once(dirname(__FILE__)."/../../qiniu/rs.php");&&&&&&&&$key = '00000';&&&&&&&&$domain = 'designpartners.qiniudn.com';&&&&&&&&$accessKey = 'IOImn35KC57Ov3scxbYkvNk6oIxB7zWsBRp16';&&&&&&&&$secretKey = 's29vc9tlCvsh7QScYTuzCDmIbUSi4EroKj1z';&&&&&&&&Qiniu_SetKeys($accessKey, $secretKey);&&&&&&&&&&$baseUrl = Qiniu_RS_MakeBaseUrl($domain, $key);&&&&&&&&$getPolicy = new Qiniu_RS_GetPolicy();&&&&&&&&$privateUrl = $getPolicy-&MakeRequest($baseUrl, null);&&&&&&&&echo "====& getPolicy result: \n";&&&&&&&&echo $privateUrl . "\n";&&&&}
function isValidateFile(obj) {
var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);
if (extend == "") {
alert("请选择头像");
if (!(extend == "jpg" || extend == "png")) {
alert("请上传后缀名为jpg或png的文件!");
&form method="post" action="http://up.qiniu.com" name = "form" enctype="multipart/form-data" onsubmit="return isValidateFile('file');"&
&input type="hidden"
id="token" name="token"
value=&?php echo $upToken?&&
&label for="key"&key:&/label&
&input name="key" value=""&
&label for="bucket"&照片:&/label&
&input name="file"
type="file" /&
&input type="submit" value="提交" &
1234567891011121314151617181920212223242526272829303132
&script&&&&&function isValidateFile(obj) {&&&&&&&&var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);&&&&&&&&if (extend == "") {&&&&&&&&&&&&alert("请选择头像");&&&&&&&&&&&&return false;&&&&&&&&}&&&&&&&&else {&&&&&&&&&&&&if (!(extend == "jpg" || extend == "png")) {&&&&&&&&&&&&alert("请上传后缀名为jpg或png的文件!");&&&&&&&&&&&&return false;&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&return true;&&&&}&/script&&form method="post" action="http://up.qiniu.com" name = "form" enctype="multipart/form-data" onsubmit="return isValidateFile('file');"&&&&&&ul&&&&&&&&&&&&&&input type="hidden"&&id="token" name="token"&&value=&?php echo $upToken?&&&&&&&&&&&li&&&&&&&&&&&&&&label for="key"&key:&/label&&&&&&&&&&&&&&input name="key" value=""&&&&&&&&&&/li&&&&&&&&&&li&&&&&&&&&&&&&&label for="bucket"&照片:&/label&&&&&&&&&&&&&&input name="file"&&type="file" /&&&&&&&&&&/li&&&&&&&&&&li&&&&&&&&&&&&&&input type="submit" value="提交" &&&&&&&&&&/li&&&&&&/ul&&/form&
转载请注明: &
or分享 (0)
我的个人微信公众号,联系我请直接在公众号留言即可~
扫码或搜索:进击的Coder
进击的Coder
微信公众号
扫一扫关注
想结交更多的朋友吗?
来进击的Coder瞧瞧吧
进击的Coder
进击的Coder灌水太多?
这里是纯粹的技术领地
激进的Coder
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的用七牛实现最简单的表单上传图片,如何获取返回值? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
用七牛实现最简单的表单上传图片,如何获取返回值?
09:44:56 +08:00 · 4166 次点击
html中的代码如下:&form method="post" action="http://up.qiniu.com/" enctype="multipart/form-data"&
&input name="key" type="hidden" value="&Your file name in qiniu&"&
&input name="x:&custom_field_name&" type="hidden" value="&Value of your custom param&"&
&input name="token" type="hidden" value="&Your uptoken from server&"&
&input name="file" type="file"/&&/form&如何获取上传后的图片直链?
目前尚无回复
& · & 2934 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 24ms · UTC 07:54 · PVG 15:54 · LAX 00:54 · JFK 03:54? Do have faith in what you're doing.2.9k 人阅读
标签:至少1个,最多5个
类似朋友圈发图,选择图片上传并展示出来
引入外部文件
从浏览器端上传文件至七牛云,并对上传成功后的图片进行数据处理操作。
引入Plupload *该SDK上传功能集于Plupload插件封装,所以需要下载P
plupload.dev.js
引入qiniu.js为了简便,当时直接从官网示例中复制的js文件
引入moxie.js因为Plupload插件除了能解决h5的上传问题,还能上传flash等,所以需要该文件。本来我们是不需要的,但由于plupload.dev.js和qiniu.js里面有依赖于moxie.js的代码,如果不引入,就一直报错:moxie not defined,挺头疼的,索性一并引入了
因为互相依赖,所以引入的顺序也很重要,先是moxie.js =& plupload.dev.js =& qiniu.js =& index.js
环境搭好了,在index.js中进行初始化
var uploader = Qiniu.uploader({
runtimes: 'html5,flash,html4',
// 上传模式,依次退化
browse_button: 'pickfiles',
// 上传选择的点选按钮ID,必需
// 在初始化时,uptoken,uptoken_url,uptoken_func三个参数中必须有一个被设置
// 且如果提供了多个,其优先级为uptoken & uptoken_url & uptoken_func
// 其中uptoken是直接提供上传凭证,uptoken_url是提供了获取上传凭证的地址,如果需要定制获取uptoken的过程则可以设置uptoken_func
// uptoken : '&Your upload token&', // uptoken是上传凭证,由其他程序生成
// uptoken_url: '/uptoken',
// Ajax请求uptoken的Url,强烈建议设置(服务端提供)
// uptoken_func: function(file){
// 在需要获取uptoken时,该方法会被调用
// do something
get_new_uptoken: false,
// 设置上传文件的时候是否每次都重新获取新的uptoken
// downtoken_url: '/downtoken',
// Ajax请求downToken的Url,私有空间时使用,JS-SDK将向该地址POST文件的key和domain,服务端返回的JSON必须包含url字段,url值为该文件的下载地址
// unique_names: true,
// 默认false,key为文件名。若开启该选项,JS-SDK会为每个文件自动生成key(文件名)
// save_key: true,
// 默认false。若在服务端生成uptoken的上传策略中指定了sava_key,则开启,SDK在前端将不对key进行任何处理
domain: '&Your bucket domain&',
// bucket域名,下载资源时用到,必需
container: 'container',
// 上传区域DOM ID,默认是browser_button的父元素
max_file_size: '100mb',
// 最大文件体积限制
flash_swf_url: 'path/of/plupload/Moxie.swf',
//引入flash,相对路径
max_retries: 3,
// 上传失败最大重试次数
dragdrop: true,
// 开启可拖曳上传
drop_element: 'container',
// 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
chunk_size: '4mb',
// 分块上传时,每块的体积
auto_start: true,
// 选择文件后自动上传,若关闭需要自己绑定事件触发上传
//x_vars : {
查看自定义变量
'time' : function(up,file) {
var time = (new Date()).getTime();
// do something with 'time'
'size' : function(up,file) {
var size = file.
// do something with 'size'
'FilesAdded': function(up, files) {
plupload.each(files, function(file) {
// 文件添加进队列后,处理相关的事情
'BeforeUpload': function(up, file) {
// 每个文件上传前,处理相关的事情
'UploadProgress': function(up, file) {
// 每个文件上传时,处理相关的事情
'FileUploaded': function(up, file, info) {
// 每个文件上传成功后,处理相关的事情
// 其中info是文件上传成功后,服务端返回的json,形式如:
"hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
"key": "gogopher.jpg"
// 查看简单反馈
// var domain = up.getOption('domain');
// var res = parseJSON(info);
// var sourceLink = domain +"/"+ res. 获取上传成功后的文件的Url
'Error': function(up, err, errTip) {
//上传出错时,处理相关的事情
'UploadComplete': function() {
//队列文件处理完毕后,处理相关的事情
'Key': function(up, file) {
// 若想在前端对每个文件的key进行个性化处理,可以配置该函数
// 该配置必须要在unique_names: false,save_key: false时才生效
var key = "";
// do something with key here
return key
// domain为七牛空间对应的域名,选择某个空间后,可通过 空间设置-&基本设置-&域名设置 查看获取
// uploader为一个plupload对象,继承了所有plupload的方法
这样基本没什么问题了。如果要限制上传文件的格式,可以添加属性filter
mime_types : [
{ title : "Image files", extensions : "jpg,gif,png"}
max_file_size: "200mb",
prevent_duplicates: true
后来要限制上传的图片张数不超过九张,如果超过就提示。这样,auto_start设置了true就不太好了,改成false,手动上传。在FilesAdded方法中判断队列中的文件个数,如果没有超过,就调用uploader.start()就接着上传了。
遇到的乌龙
文件的引入问题
domain获取错误,结果图片的url错误,找不到
设置了自动上传,结果一点上传,一股脑就执行完了一连串的步骤
多看文档,多比较人家的实例
0 收藏&&|&&3
你可能感兴趣的文章
你好 请问那个uptoken怎么获取?我看官网好像都没有说?能不能直接获取到然后前端js写进去的?
你好 请问那个uptoken怎么获取?我看官网好像都没有说?能不能直接获取到然后前端js写进去的?
你可能感兴趣的文章
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 七牛云上传文件 的文章

 

随机推荐