概述

客户上传文件到七牛后,七牛服务器会响应 200 状态码,响应内容包括 hash 和 key 。但是如果客户需要自定义响应内容,则可以通过设置回调来实现。

回调实现

客户端需要在上传 token 中设置 callbackurl 和 callbody

1、callbackurl 必须是公网上可正常进行 POST 请求并能正常响应的 url,并且业务服务器返回给七牛的内容必须是 json 串.

这里给一个最简单的能响应200的php代码(获取 callbackbody 并打印一个字符串给客户端)

$notifyBody = file_get_contents('php://input');

file_put_contents("test.txt",$notifyBody);

$arr=array("date"=>"test");

echo json_ encode($arr);

?>

2、callbackbody 是需要向业务服务器发送的回调内容,需使用七牛的魔法变量或自定义变量来填充。

但是格式一定要正确,否则会报400格式错误.

例如 java 中正确的格式:

auth.uploadToken(bucket,key,3600,new StringMap()

.put("callbackUrl","callbackurl")

.put("callbackBody", "{"filename":$(fname),"filesize":$(fsize),"width":$(imageInfo.width)}") );

3、callbodytype 默认是 application/x-www-form-urlencoded, 也可在上传策略中设置为 application/json

回调鉴权

因为回调地址是公网可访问的,任何一台服务器都可以对其发起回调,如何确认回调是来自七牛的呢?

七牛在发起回调请求时会在请求头中带上 Authorization 字段,

Authorization:QBox iN7NgwM31j4-BZacMjPrOQBs34UG1maYCAQmhdCV:tDK-3f5xF3SJYEAwsll5g=

其中 QBox 为固定值,iN7Ngw...dCV 为用户的 Accesskey,tDK-3f...5g= 为签名结果 encoded_data。

业务服务器可以通过多种方法来对其进行验证, 例如如下面的代码php来进行验证:

require_once __DIR__ . '/../autoload.php';

use Qiniu\Auth;

$accessKey = getenv('QINIU_ACCESS_KEY');

$secretKey = getenv('QINIU_SECRET_KEY');

$bucket = getenv('QINIU_TEST_BUCKET');

$auth = new Auth($accessKey, $secretKey);

//获取回调的body信息

$callbackBody = file_get_contents('php://input');

//回调的contentType

$contentType = 'application/x-www-form-urlencoded';

//回调的签名信息,可以验证该回调是否来自存储服务

$authorization = $_SERVER['HTTP_AUTHORIZATION'];

//回调url

$url = 'http://172.30.251.210/upload_verify_callback.php';

$isQiniuCallback = $auth->verifyCallback($contentType, $authorization, $url, $callbackBody);

if ($isQiniuCallback) {

$resp = array('ret' => 'success');

} else {

$resp = array('ret' => 'failed');

}

echo json_encode($resp);

回调常见错误

1、400错误

这个是上传时表单格式错误,例如 callbackbody 设置的格式有问题等

2、579错误

1、上传成功回调失败,可以自己先用curl来验证callbackurl是否能成功响应200

curl -X POST -d "name=123.jpg" http://url

2、业务服务器返回给七牛的 body 不是合法的 json 串

报错信息:{"error":"unexcepted response"}

这时可通过抓包,获取七牛返回给客户端的 body ,通过 http://jsonlint.com 验证是否回调的 body 为合法的 json 串

3、业务服务器拒绝七牛的回调请求

解决方案是配置允许七牛的回调UA的访问。 七牛回调UA:qiniu-callback/1.0

java七牛获取访问路径_七牛回调及回调鉴权相关推荐

  1. idea 启动php项目路径,关于idea中Java Web项目的访问路径问题

    说明 这里只以 servlet 为例,没有涉及到框架,但其实路径的基本原理和框架的关系不大,所以学了框架的同学如果对路径有疑惑的也可以阅读此文 项目结构 在 idea 中新建一个 Java Web 项 ...

  2. java获取访问路径、域名、项目名、请求入参

    2019独角兽企业重金招聘Python工程师标准>>> 废话不多说(这句不是废话吗>>),直接提出可以运行的类,你放到一个web项目访问下就知道了. //测试页面-跳转到 ...

  3. java复制文件拒绝访问权限_无法复制文件,拒绝访问路径

    回答(30) 2 years ago 我通过从bin文件夹中删除有争议的文件并重建项目来解决这个问题 . 2 years ago 只需确保该文件夹不是只读文件并重建解决方案 2 years ago 我 ...

  4. Java获取文件路径获取访问路径、域名、项目名、请求入参

    String path=request.getSession().getServletContext().getRealPath("/WEB-INF/2.jpg"); ====== ...

  5. Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3

    点击下载代码   http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法,用来获取 ...

  6. Java牛客项目课_仿牛客网讨论区_第八章

    文章目录 第八章.项目发布与总结 8.1. 单元测试 8.2.项目监控 8.3.项目部署 宝塔面板.yum.rpm.压缩包 安装 unzip.Java1.8.Maven.MySQL.Redis.Kaf ...

  7. php七牛云获取管理凭证调用七牛云资源列举列表,获取七牛云文件列表

    #说明:我这使用的是类,可根据自己需求进行拆分为发方法,我使用的是authorizationV2使用v1的可以自行去看文档或者sdk #七牛云官方文档路径:[七牛云资源列举文档](https://de ...

  8. java代码中获取classpath路径

    原贴:http://blog.csdn.net/magi1201/article/details/18731581 java web工程中,有时候需要自己手动的去读取classpath下面的配置文件, ...

  9. JAVA项目中获取项目路径

    public static void main(String[] args) {MyUrlDemo muDemo = new MyUrlDemo();try {muDemo.showURL();} c ...

最新文章

  1. hls二次加密 m3u8_HLS实战之Wireshark抓包分析
  2. 学习前端html 设置样式
  3. 最后生成神么格式的代码_智能扩充机器人的“标准问”库之Query生成
  4. 福州大学软件工程1816 | W班 第7次作业成绩排名
  5. 阿里开源:思考,演进和发展
  6. 华南理工大学和浙大计算机学院,浙江大学和华南理工大学的办学实力比较
  7. 迷宫回溯问题分析和实现
  8. 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)
  9. 阿里开发规范_字字珠玑,高级技术专家带你了解阿里的开发流程规范
  10. Spring Data Jpa 查询返回自定义对象
  11. mysql注入转义绕过_SQL注入防御绕过
  12. windows下重装系统时驱动备份和恢复命令
  13. 【图论-二分图】中山纪念中学暑期游Day15——【NOIP2013模拟联考3】沙耶的玩偶(doll)
  14. Pull request 团队合作开发使用详解
  15. adobe xd 白屏闪退 终极拯救方法
  16. 【FFMPEG】解决截取MP4视频的中间段时,截取完成后前几帧视频卡住,但是有声音的情况
  17. IDEA新建项目配置tomcat
  18. python伪造邮件发件地址_Python3学习系列(四):编写属于自己的邮件伪造工具...
  19. 去哪儿2017校园招聘 开发工程师(第一批次)- 题解
  20. PIC16F877A单片机 (IIC总线+PCF8563芯片)

热门文章

  1. Oculus/VR新手入门指南
  2. 人脸识别接口_人脸识别云服务
  3. 数学建模三剑客MSN | CSDN博文精选
  4. python获取word页数_用程序获取word页码方法汇总
  5. python编号/排序/翻转/并行迭代使用场景及作用
  6. 【易代账】凭证保存的时候提示sql执行错误
  7. SAP创建供应商及采购订单
  8. 励志语录(忙碌的同时也要停下来思考人生)
  9. 招聘网站分析-智联招聘网的爬虫设计与实现
  10. 在线打包app平台以及流程平台分析(AndroidiOS)