needlogin=true; $me = new User(); $me->loadMe(); $this->me = $me; $this->layout()->set("me",$me); /*if(!$me->isAdmin()) { $this->redirect("Dashboard"); }*/ } protected function downloadAction() { $id = $this->request->id; if(!is_numeric($id) || $id < 1) { return true; } $file = new File($id); if(!$file) { throw new Exception("File not found", 404); } $filename = $file->store_filename; $path = MFUPLOAD_FILE_SAVE_PATH; $path .= ($file->subfolder) ? "/".$file->subfolder : ""; $path .= "/$filename"; if(!file_exists($path)) { throw new Exception("File not found", 4041); } if(preg_match('/\.([^.]+)/',$filename,$m)) { $ext .= $m[1]; } else { throw new Exception("File not found", 4042); } $outname = ($file->filename) ? $file->filename : $file->orig_filename; if(!$this->sendfile($path, $outname)) { throw new Exception("File not found", 4043); } exit; } private function sendfile($file,$name) { $this->log->debug("sendfile: $file $name"); if (!$fh = fopen($file, 'r')) { return false; } set_time_limit(36000); header('Content-Type: application/octet-stream'); header('Content-disposition: attachment; filename="' . $name . '"'); $size = exec('stat -c %s '.escapeshellarg($file)); if(strlen($size)) { if($size < (pow(2,31))-1) { header('Content-Length: ' . $size); } } while (!feof($fh)) { $data = fread($fh, 8192); echo $data; } return true; } protected function getByIdAction() { $file = new File($this->request->id); if (!$file->id) { http_response_code(404); self::returnJson(["error" => "File not found"]); return; } self::returnJson([ "id" => $file->id, "filename" => $file->orig_filename ]); } protected function showAction() { $id = $this->request->id; if (!is_numeric($id) || $id < 1) return true; $file = new File($id); if (!$file || !$file->id) throw new Exception("File record not found", 404); $path = MFUPLOAD_FILE_SAVE_PATH . ($file->subfolder ? "/{$file->subfolder}" : "") . "/{$file->store_filename}"; if (!is_readable($path)) throw new Exception("Physical file not found", 4041); if (($imageInfo = @getimagesize($path)) !== false) { header('Content-Type: ' . $imageInfo['mime']); header('Content-Disposition: inline; filename="' . ($file->orig_filename ?: $file->store_filename) . '"'); readfile($path); exit; } else { throw new Exception("File is not a displayable image.", 415); } } }