path($name, $safe)); } /** * 根据Key读取文件内容 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return string */ public function get($name, $safe = false) { if (!$this->has($name, $safe)) return ''; return file_get_contents($this->path($name, $safe)); } /** * 获取文件当前URL地址 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return boolean|string|null */ public function url($name, $safe = false) { if ($safe) return null; return $this->has($name) ? $this->base($name) : false; } /** * 根据配置获取到本地上传的目标地址 * @return string */ public function upload() { return url('@') . '?s=admin/api.plugs/upload'; } /** * 获取服务器URL前缀 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return string|null */ public function base($name = '', $safe = false) { if ($safe) return null; $root = rtrim(dirname(request()->basefile(true)), '\\/'); return "{$root}/upload/{$name}"; } /** * 获取文件路径 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return string */ public function path($name, $safe = false) { $path = $safe ? 'safefile' : 'public/upload'; return str_replace('\\', '/', env('root_path') . "{$path}/{$name}"); } /** * 文件储存在本地 * @param string $name 文件名称 * @param string $content 文件内容 * @param boolean $safe 安全模式 * @return array|null */ public function save($name, $content, $safe = false) { try { $file = $this->path($name, $safe); file_exists(dirname($file)) || mkdir(dirname($file), 0755, true); if (file_put_contents($file, $content)) return $this->info($name, $safe); } catch (\Exception $e) { \think\facade\Log::error(__METHOD__ . " 本地文件存储失败,{$e->getMessage()}"); } return null; } /** * 获取文件信息 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return array|null */ public function info($name, $safe = false) { if ($this->has($name, $safe) && is_string($file = $this->path($name, $safe))) { return ['file' => $file, 'hash' => md5_file($file), 'url' => $this->base($name), 'key' => "upload/{$name}"]; } return null; } /** * 删除文件 * @param string $name 文件名称 * @param boolean $safe 安全模式 * @return boolean|null */ public function remove($name, $safe = false) { if ($this->has($name, $safe) && is_string($file = $this->path($name, $safe))) { return @unlink($file); } return true; } }