2010-08-17 44 views
3

我已經爲客戶分配了一個新任務,這是一個按照MVC設計模式製作的文檔共享應用程序。這裏是要求:使用MVC共享文檔的應用程序

  • 上傳和下載文件,使用瀏覽器

  • 存儲在數據庫中的文檔,如果是更安全的文件,其他商店的目錄啓用或不具有訪問密碼的選項密碼

  • 每個用戶都將擁有自己的文檔目錄/工作區,從那裏他可以與其他用戶共享文檔。和公共共享區域共享和上傳文件

  • 超級管理員將能夠監控文件上傳日誌記錄用於監控目的。

我有一個大概的想法,但我真的很想知道你對上面幾點的想法,特別是那裏有什麼大膽的想法。

上面的第三點是最重要的,我不知道從哪裏開始以及如何去記錄上傳。感謝您的建議。

我基本上要求實現第三和第四點的細節。

+0

請在回答中更清楚地尋找答案 – Gordon 2010-08-17 13:35:34

+0

@Gordon:如何去考慮這些問題。對於上述各點,你可以提出什麼建議?例如,如何做第三點或如何做上傳日誌。 – Sarfraz 2010-08-17 13:46:38

+0

是不是像擁有正確的數據庫字段的權限一樣簡單,然後一個腳本在檢查權限後提供文件? – zaf 2010-08-17 14:53:46

回答

3

這是我如何使用CakePHP實現它,它很好地工作。首先,我確定我的應用程序代碼位於公共html目錄之上,以便它不會暴露給網絡。所以基本上,用戶可以直接訪問的唯一文件是index.php文件,css/js和圖像文件。

然後,我更新我的檔案管理模式,以保存和刪除文件上飛:

function beforeSave() { 
    extract($this->data['Upload']['file']); 
    if(isset($name) and !empty($name)) { 
     $filename = time().'-'.$name; 
     if ($size && !$error) { 
      move_uploaded_file($tmp_name, APP . 'media/files/' . $filename); 
      $this->data['Upload']['file'] = $filename; 
      $this->data['Upload']['name'] = $name; 
      $this->data['Upload']['file_type'] = $type; 
     } 
    } else { 
     // remove the photo so it is not updated 
     unset($this->data['Upload']['file']); 
    } 
    return parent::beforeSave(); 
} 

function beforeDelete() { 
    $data = $this->read(null, $this->id); 
    if(is_file(APP . 'media/files/' . $data['Upload']['file'])) { 
     unlink(APP . 'media/files/' . $data['Upload']['file']); 
    } 
    return true; 
} 

這將管理文件上傳,並把所有的命名信息到數據庫中。由於app/media/files目錄不能被網絡訪問,我不必保護目錄。這意味着無論用戶想要什麼文件,他們都必須從網站訪問它。

然後,您所要做的就是確保模型表中有一個「可共享」標誌,表明該文件可以被全世界訪問,然後任何人都可以看到該文件並下載它。