Beispiel #1
0
 /**
  * 上傳檔案
  * @param Object $f3
  * @return boolean
  */
 public function upload($f3)
 {
     // 要設定這個header,才能做iframe
     header('X-Frame-Options: ');
     /*
     if ($f3->exists($this->session_key)) {
         $template = new Template_json;
         echo $template->render("mock_jquery_file_upload_handler.js", 'text/javascript');        
         return $this;
     }
     */
     //header("Access-Control-Allow-Origin: http://localhost");
     if (isset($_FILES["file"]) === FALSE) {
         if (isset($_POST["file"]) === FALSE) {
             throw new Exception("no file upload");
         } else {
             $data = substr($_POST['file'], strpos($_POST['file'], ",") + 1);
             $type = substr($_POST['file'], 5, strpos($_POST['file'], ";base64") - 5);
             $type = stripcslashes($type);
             $decodedData = base64_decode($data);
             $filename = urldecode($_POST['fname']);
             $tmp_name = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename;
             //echo $tmp_name;
             $fp = fopen($tmp_name, 'wb');
             fwrite($fp, $decodedData);
             fclose($fp);
             $file = array("name" => $filename, "size" => filesize($tmp_name), "tmp_name" => $tmp_name, "type" => $type);
         }
         //$f3->reroute("/");
         //return $this;
     } else {
         $file = $_FILES["file"];
     }
     //var_dump($_POST);
     //var_dump($_FILES);
     //echo $_POST["fileupload"];
     //$file = $_FILES["file"];
     //var_dump($file);
     if (TRUE) {
         try {
             $validate_result = $this->_validate_file($f3, $file);
         } catch (Exception $e) {
             $validate_result = $file["name"] . " upload error: " . $e->getMessage();
         }
     } else {
         $validate_result = $this->_validate_file($f3, $file);
     }
     //$result = FALSE;
     // 召喚session
     /*
     $db = $f3->get("DATABASE.host");
     if (String_helper::starts_with($db, "sqlite:") === TRUE 
             && String_helper::starts_with($db, "sqlite:/") === FALSE) {
         $filename = substr($db, strpos($db, ":")+1);
         //echo $filename;
         $db = "sqlite://" . PFH_File_helper::get_root_dir($f3, $filename);
         //sqlite://D:\xampp\htdocs\php-file-host\phpfilehost.sqlite.db
         $db = "sqlite:phpfilehost.sqlite.db";
         echo $db;
     }            
     */
     $bean = NULL;
     if ($validate_result === TRUE) {
         //$result = $this->_db_record_create($f3, $file, $md5);
         $bean = PFH_File_model::create_from_upload($f3, $file);
         // 新增KEY到SESSION之中
         $f3->set($this->session_key, $bean->id);
         if ($f3->exists($this->session_error_key)) {
             $f3->clear($this->session_error_key);
         }
     } else {
         // 從SESSION刪除
         $f3->clear($this->session_key);
     }
     // -------------------------
     // reroute
     if ($f3->get("POST.local_upload") !== "1") {
         $reroute = "/get_link";
         if ($f3->exists("GET.callback")) {
             $reroute = $reroute . "?callback=" . $f3->get("GET.callback");
         }
         //echo $bean->id;
         $f3->reroute($reroute);
     } else {
         $data = array('name' => $file['name'], 'size' => $file['size']);
         if (is_null($bean) === FALSE) {
             $data["url"] = PFH_File_model::get_link($f3, $bean);
         } else {
             $data["error"] = $validate_result;
         }
         $f3->set("handle", $data);
         $template = new Template_json();
         echo $template->render("jquery_file_upload_handler.js", 'text/javascript');
     }
     return $this;
 }