七牛クラウドの持続化アップロード画像とサムネイルの生成、マルチファイルのパッケージダウンロード
私のブログwww.kevinkへようこそ.club,php,swoole,golang,redisなどをタイミングで更新
コードを書く前に、七牛雲のDEMOにツッコミを入れたいのですが、確かにあまり書いていません.
くだらないことはあまり言わないで、始めましょう.
プロジェクトフレームワークTP 5.1、前に他の人が少し書いたが、七牛雲のSDKカタログを直すのがおっくうで、強迫症患者は我慢して見ましょう.
qiniuのphpSDKはvendorフォルダの下に置かれています.
1.永続化処理によるサムネイルのアップロードおよび生成.アップロードした画像は20 M+大きいので、持続化処理を採用してアップロードし、putfile 20 Mの画像はアップロードさせません.
新Filenameは七牛雲に保存された原図keyで、
oldFilePathサーバ上のピクチャのアドレス、サーバキャッシュ内のアドレス
persistentops:ピクチャに対する操作で、複数の操作があれば使用し、隔てます.
persistentNotifyUrlは非同期で返される通知アドレスであり、この方法ではサーバにサムネイルを保存し、7牛クラウド上のサムネイルを削除することです.
完了した操作:原図のkeyを設定し、原図を保存した後、200*200のサムネイルを生成して七牛雲に保存します.
次のコードは非同期メソッドです.
deleteFileの方法は貼らないで、七牛雲にあって、簡単です.
最後にjson文字列の通知を返します.そうしないと、マルチメディアキューに失敗が表示されます.
2.マルチファイルパッケージzipダウンロード
keysは、パッケージするファイルをすべて保存したkey配列です.
zipKeyは七牛雲に保存された圧縮パッケージkey
完了:keys配列のすべてのファイルをzipにパッケージ化し、7牛クラウドに保存し、非同期通知方法で圧縮パッケージをダウンロードします.
pipelineが独自に作成したマルチメディアキュー名
key = test.zipこれはピットです.このファイルはデフォルトのファイルです.testをアップロードする必要があります.zip(小さな圧縮バッグを勝手にアップロード)は七牛雲に.
圧縮パッケージのダウンロード方法と
以上の非同期通知方法は類似しており,後述しない.
ようこそhttp://www.kevink.club詳細を表示
以上の方法に問題があれば、すぐに連絡してください.
コードを書く前に、七牛雲のDEMOにツッコミを入れたいのですが、確かにあまり書いていません.
くだらないことはあまり言わないで、始めましょう.
プロジェクトフレームワークTP 5.1、前に他の人が少し書いたが、七牛雲のSDKカタログを直すのがおっくうで、強迫症患者は我慢して見ましょう.
qiniuのphpSDKはvendorフォルダの下に置かれています.
1.永続化処理によるサムネイルのアップロードおよび生成.アップロードした画像は20 M+大きいので、持続化処理を採用してアップロードし、putfile 20 Mの画像はアップロードさせません.
新Filenameは七牛雲に保存された原図keyで、
oldFilePathサーバ上のピクチャのアドレス、サーバキャッシュ内のアドレス
persistentops:ピクチャに対する操作で、複数の操作があれば使用し、隔てます.
persistentNotifyUrlは非同期で返される通知アドレスであり、この方法ではサーバにサムネイルを保存し、7牛クラウド上のサムネイルを削除することです.
完了した操作:原図のkeyを設定し、原図を保存した後、200*200のサムネイルを生成して七牛雲に保存します.
private function uploadImgPost($newFilename, $oldFilepath){
set_time_limit(0);
$t1 = microtime(true);
require_once APP_PATH . '/../vendor/qiniu/autoload.php';
//
$auth = new Auth($this->accessKey, $this->secretKey);
// key
$explode = explode(".", $newFilename);
$thumbKey = $explode[0] . "_thumb" .".". $explode[1];
$entry = $this->bucket .":". $thumbKey;
$encodedEntryURI = \Qiniu\base64_urlSafeEncode($entry);
$array = [
'persistentOps'=>'imageView2/2/w/200/h/200/q/70/ignore-error/1/|saveas/'.$encodedEntryURI, // 200*200 ,
'persistentNotifyUrl'=> url('appindex/Files/uploadImgNotify', '', true, true),
];
// Token
$token = $auth->uploadToken($this->bucket, null, 3600, $array );
// UploadManager
$uploadMgr = new UploadManager();
// UploadManager putFile
list($ret, $err) = $uploadMgr->putFile($token, $newFilename, $oldFilepath);
if ($err !== null) {
return ['code' => -1, 'msg' =>' '];
} else {
$t2 = microtime(true);
file_put_contents('time.log', " :" . ($t2 - $t1) . " ", FILE_APPEND );
// URL
$newFilepath = $this->httpPre . $this->domain . "/" . $ret['key'];
//
$thumbUrl = $this->getThumbUrlFromQiniuKey($ret['key']);
return ['code' => 1, 'msg' => ' ', 'data' => ['url'=> $newFilepath, 'previewUrl' => $thumbUrl]];
}
}
次のコードは非同期メソッドです.
deleteFileの方法は貼らないで、七牛雲にあって、簡単です.
最後にjson文字列の通知を返します.そうしないと、マルチメディアキューに失敗が表示されます.
/**
* , ,
* Function uploadImgNotify
* @author mselect <[email protected]>
* @DateTime 2019/5/16
*/
public function uploadImgNotify(){
$arr = $this->request->param();
if( !empty($arr['code']) && $arr['code'] == 0 ){
//
$items = $arr['items'];
$path = ROOT_PATH . $this->thumbSavePath;
if(!is_dir($path)){
mkdir($path, 0777, true);
}
foreach($items as $item){
if(strpos($item['cmd'], 'saveas') !== false){
// ,
$url = $this->httpPre . $this->domain . '/' . $item['key'];
$back = file_put_contents($path . $item['key'] , file_get_contents($url));
if($back <=0 ){
unlink($path . $item['key']);
}else {
//
$this->deleteFile($item['key']);
}
}
}
$resp = array('ret' => 'succeed');
}else {
$resp = array('ret' => 'failed');
}
return json($resp);
}
2.マルチファイルパッケージzipダウンロード
keysは、パッケージするファイルをすべて保存したkey配列です.
zipKeyは七牛雲に保存された圧縮パッケージkey
完了:keys配列のすべてのファイルをzipにパッケージ化し、7牛クラウドに保存し、非同期通知方法で圧縮パッケージをダウンロードします.
pipelineが独自に作成したマルチメディアキュー名
key = test.zipこれはピットです.このファイルはデフォルトのファイルです.testをアップロードする必要があります.zip(小さな圧縮バッグを勝手にアップロード)は七牛雲に.
/**
*
* zip
* Function mkzip
* @author mselect <[email protected]>
* @DateTime 2019/5/13
* @param $keys array
*/
public function mkzip($keys, $zipKey){
require_once APP_PATH . '/../vendor/qiniu/autoload.php';
$auth = new Auth($this->accessKey, $this->secretKey);
$pipeline = 'mkzip';
$key = "test.zip"; //d5b37d559fbec90b0cdc_water
$pfop = new PersistentFop($auth, null);
$fops = 'mkzip/2';
foreach($keys as $value){
$fops .= '/url/' . \Qiniu\base64_urlSafeEncode($value);
}
$zipKey = $zipKey . ".zip";
$fops .= '|saveas/' . \Qiniu\base64_urlSafeEncode($this->bucket . ":" . $zipKey);
$notify_url = url('appindex/Files/mkzipNotify', '', true, true);
$force = false;
list($id, $err) = $pfop->execute($this->bucket, $key, $fops, $pipeline, $notify_url, $force);
file_put_contents('imgwater.log', " ID: $id , :$notify_url \r
", FILE_APPEND);
if($err !==null){
return ['code' => -1, 'msg' => ' '];
}else {
//
while(true){
$url = "http://api.qiniu.com/status/get/prefop?id=" . $id;
$json = file_get_contents($url);
$arr = json_decode($json, true);
if($arr['code'] == 0 ){
break;
}else if($arr['code'] == 3 || $arr['code'] == 4){
file_put_contents('imgwater.log', $arr['desc'] . "\r
", FILE_APPEND);
return ['code' => -1, 'msg'=> $arr['desc']];
}
}
return ['code' => 1, 'msg' => ' ', 'data' => ['fileKey' => $this->httpPre . $this->domain . "/" . $zipKey]];
}
}
圧縮パッケージのダウンロード方法と
以上の非同期通知方法は類似しており,後述しない.
ようこそhttp://www.kevink.club詳細を表示
以上の方法に問題があれば、すぐに連絡してください.