KFileLib.php 4.8 KB
<?php namespace App\Jobs;


use Auth;
use Config;
use App\Models\User;

use Storage;

class KFileLib
{

  
  public function __construct()
  {

  }
  public function urlExists($url)
  {
    ini_set('default_socket_timeout', 15);
    try
    {
      $headers = get_headers($url);
      if(substr($headers[0], 9, 3)!="404")return true;
      else return false;
    }
    catch(Exception $e)
    {
      return false;
    }
  }

  public function saveFileToDisk($keyname,$filePath,$contenttype)
  {
    if(Storage::exists($keyname))Storage::delete($keyname);
    
    Auth::user()->diskuse=0;Auth::user()->save();
    
    return Storage::put($keyname, file_get_contents($filePath));
  }
  public function saveFileToDiskString($keyname,$bodystr,$contenttype,$userid)
  {
    $user=User::find($userid);
    $user->diskuse=0;$user->save();
    
    if(Storage::exists($keyname))Storage::delete($keyname);
    return Storage::put($keyname, $bodystr);
  }
  public function copyObject($sourceKeyname,$targetKeyname)
  {
    if(Storage::exists($targetKeyname))Storage::delete($targetKeyname);
    
    Auth::user()->diskuse=0;Auth::user()->save();
    
    return Storage::copy($sourceKeyname,$targetKeyname);
  }
  public function deleteObject($keyname)
  {
    Auth::user()->diskuse=0;Auth::user()->save();
    
    if(Storage::exists($keyname))return Storage::delete($keyname);
  }
  public function moveObject($sourceKeyname,$targetKeyname)
  {
    if(Storage::exists($targetKeyname))Storage::delete($targetKeyname);
    if(Storage::exists($sourceKeyname))Storage::move($sourceKeyname,$targetKeyname);
    
    Auth::user()->diskuse=0;Auth::user()->save();
  }
  public function getObject($keyname)
  {
  
    return Storage::get($keyname);
  }
  public function mimeType($filepath)
  {
		return Storage::mimeType($filepath);
  }
  public function getMetaData($filePath)
	{
		return Storage::getMetaData($filePath);
	}
	public function exists($keyname)
	{
		return Storage::exists($keyname);
	}
  
  public function folderSpaceUse($path)
  {
    if(Auth::user()->diskuse>0)return Auth::user()->diskuse;
    $size=0;
    
    if(Config::get("filesystems.default")=='s3')
    {
        $config = array();
        $config['region'] = Config::get("filesystems.disks.s3.region");
        $config['version'] = 'latest';
        $config['credentials']=array('key' => Config::get("filesystems.disks.s3.key"), 'secret' => Config::get("filesystems.disks.s3.secret"));
        
        $s3 = \Aws\S3\S3Client::factory($config);
        
        $iterator = $s3->getIterator('ListObjects', array(
        'Bucket' => Config::get("filesystems.disks.s3.bucket"),
        'Prefix' => $path
        ));

        
        foreach ($iterator as $object) {
            $size+=$object['Size'];
        }
    }
    if(Config::get("filesystems.default")=='local')
    {
        if(is_dir(Config::get("filesystems.disks.local.root")."/".$path))
        {
            $res=$this->localdirsize(Config::get("filesystems.disks.local.root")."/".$path);
            $size=$res['size'];
        }
    }
    
    
    if($size==0)$size=1;
    
    Auth::user()->diskuse=$size;Auth::user()->save();
    return $size;
  }
  public function folderfiles($path)
  {
    $files = Storage::allFiles($path);

    return $files;
  }
  
  
  public function parallelMoveObjs($basedirtmp,$sourcedir,$targetbasedir)
  {
    if(Config::get("filesystems.default")=='s3')
    {
				$script=public_path("assets/extras/s3-parallel-put").
        putenv("AWS_ACCESS_KEY_ID=".Config::get("filesystems.disks.s3.key"));
        putenv("AWS_SECRET_ACCESS_KEY=".Config::get("filesystems.disks.s3.secret"));
        exec("cd $basedirtmp;chmod -R 777 $sourcedir;$script --bucket=\"".Config::get("filesystems.disks.s3.bucket")."\" --prefix=$targetbasedir $sourcedir --insecure --content-type=image/jpeg --host=s3.amazonaws.com ;rm -rf $sourcedir");//--content-type=image/jpeg
    }
    if(Config::get("filesystems.default")=='local')
    {
        $fullsourcedir=$basedirtmp.$sourcedir;
        $fulltargetdir=Config::get("filesystems.disks.local.root")."/".$targetbasedir."/";
        exec("cd $basedirtmp;chmod -R 777 $sourcedir;rm -rf \"$fulltargetdir$sourcedir\";mv -f \"$fullsourcedir\" \"$fulltargetdir\";rm -rf $sourcedir");
    }
    
  }
  
  
  public function localdirsize($dir) {
        if(is_file($dir)) return array('size'=>filesize($dir),'howmany'=>0);
        if($dh=opendir($dir)) {
            $size=0;
            $n = 0;
            while(($file=readdir($dh))!==false) {
                if($file=='.' || $file=='..') continue;
                $n++;
                $data = $this->localdirsize($dir.'/'.$file);
                $size += $data['size'];
                $n += $data['howmany'];
            }
            closedir($dh);
            return array('size'=>$size,'howmany'=>$n);
        } 
        return array('size'=>0,'howmany'=>0);
    }
  
}