rewrite Storage class to improve reusability

This commit is contained in:
printempw 2016-08-17 13:16:46 +08:00
parent b137b88952
commit ced8e30797
5 changed files with 52 additions and 26 deletions

View File

@ -127,7 +127,7 @@ class SkinlibController extends BaseController
$t->name = $_POST['name'];
$t->type = $_POST['type'];
$t->likes = 1;
$t->hash = \Storage::upload($_FILES['file']);
$t->hash = Utils::upload($_FILES['file']);
$t->size = ceil($_FILES['file']['size'] / 1024);
$t->public = ($_POST['public'] == 'true') ? "1" : "0";
$t->uploader = $this->user->uid;

View File

@ -123,7 +123,7 @@ class TextureController extends BaseController
if (\Storage::exist($fname)) {
header('Content-Type: image/png');
echo \Storage::fread($fname);
echo \Storage::read($fname);
} else {
Http::abort(404, '请求的材质文件已经被删除');
}

View File

@ -84,7 +84,7 @@ class Player
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->getLastModified()).' GMT');
header('Content-Length: '.filesize($filename));
return \Storage::fread($filename);
return \Storage::read($filename);
} else {
\Http::abort(404, '请求的贴图已被删除。');
}

View File

@ -4,29 +4,19 @@ namespace App\Services;
class Storage
{
/**
* Rename uploaded file
*
* @param array $file, files uploaded via HTTP POST
* @return string $hash, sha256 hash of file
*/
public static function upload($file)
{
move_uploaded_file($file["tmp_name"], BASE_DIR."/textures/tmp.png");
$hash = hash_file('sha256', BASE_DIR."/textures/tmp.png");
rename(BASE_DIR."/textures/tmp.png", BASE_DIR."/textures/".$hash);
return $hash;
}
/**
* Read a file and return bin data
*
* @param string $filename
* @return resource, binary data
* @return string|bool
*/
public static function fread($filename)
public static function read($filename)
{
return fread(fopen($filename, 'r'), filesize($filename));
$result = file_get_contents($filename, 'r');
if (false === $result) {
throw new \Exception("Failed to read $filename.");
}
return $result;
}
public static function exist($filename)
@ -34,6 +24,19 @@ class Storage
return file_exists($filename);
}
public static function hash($filename, $type = 'sha256')
{
return hash_file('sha256', $filename);
}
public static function rename($fname, $new_fname)
{
if (false === rename($fname, $new_fname)) {
throw new \Exception("Failed to rename $fname to $new_fname.");
}
return $new_fname;
}
/**
* Remove a file
*
@ -126,8 +129,10 @@ class Storage
*/
public static function copyDir($source, $dest)
{
if(!is_dir($source)) return false;
if(!is_dir($dest)) mkdir($dest, 0777, true);
if(!is_dir($source))
return false;
if(!is_dir($dest))
mkdir($dest, 0777, true);
$handle = dir($source);
@ -138,7 +143,6 @@ class Storage
self::copyDir($source.'/'.$entry, $dest.'/'.$entry);
} else {
@copy($source.'/'.$entry, $dest.'/'.$entry);
// echo $source.'/'.$entry." => ".$dest.'/'.$entry."<br />";
}
}
}

View File

@ -12,7 +12,8 @@ class Utils
* @param string $string
* @return string
*/
public static function convertString($string) {
public static function convertString($string)
{
return addslashes(trim($string));
}
@ -24,17 +25,38 @@ class Utils
* @param string $default
* @return string
*/
public static function getValue($key, $array, $default = "") {
public static function getValue($key, $array, $default = "")
{
return array_key_exists($key, $array) ? $array[$key] : $default;
}
/**
* Rename uploaded file
*
* @param array $file files uploaded via HTTP POST
* @return string $hash sha256 hash of file
*/
public static function upload($file)
{
$path = BASE_DIR.'/textures/tmp'.time();
if (false === move_uploaded_file($file['tmp_name'], $path)) {
throw new App\Exceptions\E('Failed to remove uploaded files, please check the permission', 1);
} else {
$hash = Storage::hash($path);
Storage::rename($path, BASE_DIR."/textures/$hash");
return $hash;
}
}
/**
* Generate random string
*
* @param int $length
* @return string
*/
public static function generateRndString($length) {
public static function generateRndString($length)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
$rnd_string = '';
for ($i = 0; $i < $length; $i++) {