You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudreve/application/index/model/Objects.php

95 lines
2.4 KiB

<?php
namespace app\index\model;
use think\Model;
use think\Db;
use Sabre\DAV;
use \app\index\model\FileManage;
class Objects extends DAV\File{
private $myPath;
public $id;
public $fileData;
public $uid;
public $fileName;
public $dir;
public $actualPath;
public $isExist;
function __construct($path) {
$ex = explode("/",$path);
$this->uid = $ex[0];
$t = strpos($path,$this->uid);
if($t == 0){
$this->myPath = substr($path,$t+strlen($this->uid));
}else{
$this->myPath = $path;
}
$this->fileName = end($ex);
$this->dir = dirname($this->myPath) == "\\" ? "/" :dirname($this->myPath);
$this->fileData = Db::name('files')->where('upload_user',$this->uid)->where('dir',$this->dir)->where('orign_name',$this->fileName)->find();
if(empty($this->fileData)){
$this->isExist = false;
}else{
$this->isExist = true;
}
$this->actualPath = ROOT_PATH . 'public/uploads/'.$this->fileData["pre_name"];
}
function getName() {
return $this->fileName;
}
function get() {
return fopen($this->actualPath, 'r');
}
function getSize() {
return $this->fileData["size"];
}
function setName($name){
$reqPath = $this->myPath;
$ex = explode("/",$reqPath);
$newPath = rtrim($reqPath,end($ex)).$name;
$renameAction = json_decode(FileManage::RenameHandler($reqPath,$newPath,$this->uid,true),true);
if(!$renameAction["result"]["success"]){
throw new DAV\Exception\Forbidden($renameAction["result"]["error"]);
}
}
function getContentType() {
return null;
}
function put($data){
$fileSize = (int)$_SERVER['CONTENT_LENGTH'];
if(!FileManage::sotrageCheck($this->uid,$fileSize)){
throw new DAV\Exception\InsufficientStorage("Quota is not enough");
}
$filePath = ROOT_PATH . 'public/uploads/' . $this->fileData["pre_name"];
file_put_contents($filePath, "");
file_put_contents($filePath, $data);
FileManage::storageGiveBack($this->uid,$this->fileData["size"]);
FileManage::storageCheckOut($this->uid,$fileSize);
@list($width, $height, $type, $attr) = getimagesize($filePath);
$picInfo = empty($width)?" ":$width.",".$height;
Db::name('files')->where('id', $this->fileData["id"])->update(['size' => $fileSize,'pic_info' => $picInfo]);
}
function delete(){
FileManage::DeleteHandler([0=>$this->myPath],$this->uid);
}
function getETag() {
return '"' . sha1(
fileinode($this->actualPath) .
filesize($this->actualPath) .
filemtime($this->actualPath)
) . '"';
}
}
?>