离线下载请求及数据库记录

This commit is contained in:
HFO4 2018-04-06 10:26:10 +08:00
parent 2ade8861c9
commit 126aacca63
2 changed files with 37 additions and 10 deletions

View file

@ -29,6 +29,19 @@ class RemoteDownload extends Controller{
return true;
}
private function insertRecord($aria2,$url){
Db::name("download")->insert([
"pid" => $aria2->pid,
"path_id" => $aria2->pathId,
"owner" => $this->userObj->uid,
"save_dir" => 1,
"status" => "ready",
"msg" => "",
"info"=>"",
"source" =>$url,
]);
}
public function addUrl(){
if(!$this->checkPerimission(0)){
return json(['error'=>1,'message'=>'您当前的无用户无法执行此操作']);
@ -36,6 +49,11 @@ class RemoteDownload extends Controller{
$aria2Options = Option::getValues(["aria2"]);
$aria2 = new Aria2($aria2Options);
$downloadStart = $aria2->addUrl(input("post.url"));
if($aria2->reqStatus){
$this->insertRecord($aria2,input("post.url"));
}else{
return json(['error'=>1,'message'=>$aria2->reqMsg]);
}
}
}

View file

@ -12,27 +12,36 @@ class Aria2 extends Model{
private $saveOptions;
public $reqStatus;
public $reqMsg;
public $pathId;
public $pid;
public function __construct($options){
$this->authToken = $options["aria2_token"];
$this->apiUrl = rtrim($options["aria2_rpcurl"],"/")."/";
$this->saveOptions = json_decode($options["aria2_options"],true);
$this->savePath = $options["aria2_tmppath"];
$this->savePath = rtrim(rtrim($options["aria2_tmppath"],"/"),"\\").DS;
}
public function addUrl($url){
//{"params": ["token:123123132",["https://www.baidu.com/img/baidu_jgylogo3.gif"],{"dir":"../"}], "jsonrpc": "2.0", "id": "qer", "method": "aria2.addUri"}
$this->pathId = uniqid();
$reqFileds = [
"params" => ["token:".$this->authToken,[
$url,["dir" => $this->savePath],
]],
"params" => ["token:".$this->authToken,
[$url],["dir" => $this->savePath.$this->pathId],
],
"jsonrpc" => "2.0",
"id" => uniqid(),
"id" => $this->pathId,
"method" => "aria2.addUri"
];
$reqFileds["params"][1][1] = array_merge($reqFileds["params"][1][1],$this->saveOptions);
$reqFileds["params"][2] = array_merge($reqFileds["params"][2],$this->saveOptions);
$reqFileds = json_encode($reqFileds,JSON_OBJECT_AS_ARRAY);
$respondData = $this->sendReq($reqFileds);
if(isset($respondData["result"])){
$this->reqStatus = 1;
$this->pid = $respondData["result"];
}else{
$this->reqStatus = 0;
$this->reqMsg = $respondData["error"]["message"];
}
}
private function sendReq($data){
@ -42,13 +51,13 @@ class Aria2 extends Model{
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$tmpInfo = curl_exec($curl); // 执行操作
$tmpInfo = curl_exec($curl);
if (curl_errno($curl)) {
$this->reqStatus = 0;
$this->reqMsg = "请求失败,".curl_error($curl);
}
curl_close($curl); // 关闭CURL会话
return json_decode($tmpInfo); // 返回数据json格式
curl_close($curl);
return json_decode($tmpInfo,true);
}
}