java七牛获取访问路径_七牛回调及回调鉴权
概述
客户上传文件到七牛后,七牛服务器会响应 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七牛获取访问路径_七牛回调及回调鉴权相关推荐
- idea 启动php项目路径,关于idea中Java Web项目的访问路径问题
说明 这里只以 servlet 为例,没有涉及到框架,但其实路径的基本原理和框架的关系不大,所以学了框架的同学如果对路径有疑惑的也可以阅读此文 项目结构 在 idea 中新建一个 Java Web 项 ...
- java获取访问路径、域名、项目名、请求入参
2019独角兽企业重金招聘Python工程师标准>>> 废话不多说(这句不是废话吗>>),直接提出可以运行的类,你放到一个web项目访问下就知道了. //测试页面-跳转到 ...
- java复制文件拒绝访问权限_无法复制文件,拒绝访问路径
回答(30) 2 years ago 我通过从bin文件夹中删除有争议的文件并重建项目来解决这个问题 . 2 years ago 只需确保该文件夹不是只读文件并重建解决方案 2 years ago 我 ...
- Java获取文件路径获取访问路径、域名、项目名、请求入参
String path=request.getSession().getServletContext().getRealPath("/WEB-INF/2.jpg"); ====== ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
点击下载代码 http://download.csdn.net/detail/lideguo1979/8291803 新建一个类RouteNavigation,定义getPath()方法,用来获取 ...
- Java牛客项目课_仿牛客网讨论区_第八章
文章目录 第八章.项目发布与总结 8.1. 单元测试 8.2.项目监控 8.3.项目部署 宝塔面板.yum.rpm.压缩包 安装 unzip.Java1.8.Maven.MySQL.Redis.Kaf ...
- php七牛云获取管理凭证调用七牛云资源列举列表,获取七牛云文件列表
#说明:我这使用的是类,可根据自己需求进行拆分为发方法,我使用的是authorizationV2使用v1的可以自行去看文档或者sdk #七牛云官方文档路径:[七牛云资源列举文档](https://de ...
- java代码中获取classpath路径
原贴:http://blog.csdn.net/magi1201/article/details/18731581 java web工程中,有时候需要自己手动的去读取classpath下面的配置文件, ...
- JAVA项目中获取项目路径
public static void main(String[] args) {MyUrlDemo muDemo = new MyUrlDemo();try {muDemo.showURL();} c ...
最新文章
- hls二次加密 m3u8_HLS实战之Wireshark抓包分析
- 学习前端html 设置样式
- 最后生成神么格式的代码_智能扩充机器人的“标准问”库之Query生成
- 福州大学软件工程1816 | W班 第7次作业成绩排名
- 阿里开源:思考,演进和发展
- 华南理工大学和浙大计算机学院,浙江大学和华南理工大学的办学实力比较
- 迷宫回溯问题分析和实现
- 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)
- 阿里开发规范_字字珠玑,高级技术专家带你了解阿里的开发流程规范
- Spring Data Jpa 查询返回自定义对象
- mysql注入转义绕过_SQL注入防御绕过
- windows下重装系统时驱动备份和恢复命令
- 【图论-二分图】中山纪念中学暑期游Day15——【NOIP2013模拟联考3】沙耶的玩偶(doll)
- Pull request 团队合作开发使用详解
- adobe xd 白屏闪退 终极拯救方法
- 【FFMPEG】解决截取MP4视频的中间段时,截取完成后前几帧视频卡住,但是有声音的情况
- IDEA新建项目配置tomcat
- python伪造邮件发件地址_Python3学习系列(四):编写属于自己的邮件伪造工具...
- 去哪儿2017校园招聘 开发工程师(第一批次)- 题解
- PIC16F877A单片机 (IIC总线+PCF8563芯片)