各位见笑了,本人菜鸟。
我按七牛的文档,用thinkphp生成uptoken,前端用七牛的JS SDK,这样前端可以上传文件到七牛并自动转码。这个过程已成功。
但前端并不知道上传的文件 何时才能转码成功。七牛的文档中写可以用persistentNotifyUrl 接收持久化处理结果通知的 URL。
是不是相当于要在thinkphp中写一个 public function??
不明白persistentNotifyUrl 对应的接收回调通知的php方法怎么写??
另外不明白的是,thinkphp后端 成功接收持久化处理结果通知 之后,前端怎么知道??后端会让前端刷新吗??
例如用户在前端成功上传文件,后端成功接收持久化处理结果通知,但前端页面是用户已打开的,如果不刷新,即使收到了通知,前端怎么知道??
文档是这么说的:
接收持久化处理结果通知的 URL。必须是公网上可以正常进行 POST 请求并能响应 HTTP/1.1 200 OK 的有效 URL。该 URL 获取的内容和持久化处理状态查询的处理结果一致。发送 body 格式是 Content-Type 为 application/json 的 POST 请求,需要按照读取流的形式读取请求的 body 才能获取。
以下是thinkphp后端代码:
public function support_music_record(){
$up_qn_conf_audio =C('up_qn_conf_audio');
$up_qn_audio = new \Think\Upload\Driver\Qiniu\QiniuStorage($up_qn_conf_audio); //实例化上传类
$persistentOps = "avthumb/m4a/ab/64k/ar/11025"; //转码策略
$date_today=date("ymd");
$encoded_name = 'ac_64/'.$id.'_'.$date_today; //作品编号+日期,设置文件名前缀,用于生命周期的管理
$save_key_encoded=base64_urlSafeEncode($up_qn_conf_audio['bucket'].':'.$encoded_name.'.m4a');
$persistentOps = $persistentOps.'|saveas/'.$save_key_encoded; //指定的Bucket中存在同Key的文件将会被处理结果覆盖
$save_key_original='ao_1/'.$id.'_'.$date_today.'$(ext)'; //1天后删除上传后的原文件
$save_name_original='ao_1/'.$id.'_'.$date_today; //1天后删除上传后的原文件
$policy = array(
'scope'=>$up_qn_conf_audio['bucket'].':'.$save_name_original, //允许修改,若已存在同名资源则会被覆盖
'deadline'=>3600,
'insertOnly'=>0, //非新增模式
'persistentOps' => $persistentOps,
'persistentPipeline' => $up_qn_conf_audio['pipeline'],
'fsizeLimit'=>5000000,
'mimeLimit'=>"audio/mp3;audio/mpeg;audio/mpg;audio/x-mp3;audio/x-mpeg;audio/x-mpg;audio/mp4;audio/MP4A-LATM;audio/x-m4a",
'forceSaveKey'=>false, //为true时,会忽略客户端指定的key,强制使用saveKey进行文件命名
'saveKey'=> $save_key_original, //若forceSaveKey为false,优先以客户端已指定Key命名,如客户端未指定则以saveKey命名。
);
$uptoken=$up_qn_audio->UploadToken($up_qn_conf_audio['secretKey'], $up_qn_conf_audio['accessKey'], $policy);
$this->assign(array( //指派标签
'uptoken'=> $uptoken,
'domain'=> $up_qn_conf_audio['domain'],
'save_key_original'=>$save_key_original,
'save_name_original'=>$save_name_original,
));
$this->display();
}
1.回调本质是云端发送一个post请求到persistentNotifyUrl(服务器用于接收回调的接口),在post请求的body中包含回调内容,所以服务器接收回调就是实现一个能接收post请求的接口,至于php如何接收post请求,可以百度下,网上有很多教程。
2.前后端分离的架构,可以通过异步ajax请求获取数据,然后展示到前端动态更新