2011-01-28 83 views
0


是否有人曾將CakePHP Media Plugin與SWFUpload或任何Flash/ajax上傳器一起使用?我無法在任何地方找到任何文檔或代碼示例。CakePHP媒體插件和SWFUpload

任何想法/建議是最受歡迎的。

感謝,
平方公尺Ë

回答

0

我已經成功地完成一起使用CakePHP 1.3,Uploadify(http://www.uploadify.com/)和Miles Johnson的上傳插件(HTTP幾行內容: //www.milesj.me/resources/script/uploader-plugin)。

讓一切正常工作花費了一些手腳,您需要仔細閱讀每個涉及的部分的文檔,使所有內容按您需要的方式工作,但這是我管理的方式它:

在您的視圖中: 包括必需的Javascript庫:jQuery,SWFObject和Uploadify。 插入將Uploadify腳本替換爲Flash上​​傳器的<input>元素。 然後插入用於指定Uploadify設置的jQuery代碼(詳情請參見Uploadify文檔)。 將Uploadify的URL設置爲發佈時,請確保將會話ID包含爲參數之一。在我的例子中,我將它作爲第一個參數傳遞(請參閱下面的Controller beforeFilter以查看完成的操作)。在您的控制器中: 包含上傳器插件的上傳器組件。 添加像這樣到beforeFilter:

function beforeFilter() { 
    if ($this->action == 'upload') { 
     $this->Session->id($this->params['pass'][0]); 
     $this->Session->start(); 
    } 
    parent::beforeFilter(); 
} 

創建一個動作做的上傳。我看起來像這樣:

function upload(){ 
    Configure::write('debug', 0); 
    $this->autoRender = false; 
     if (isset($this->params['form']['Filedata'])) { 
    $this->data['Upload'] = $this->params['form']; 
    $data = $this->Uploader->upload('Filedata'); 
    } 
} 

這就是它的本質。

但是有幾個問題。

我將會話ID傳遞給控制器​​,並使用該ID啓動一個新會話,因爲Uploadify對URL的帖子可以看作是來自不同的用戶代理,這可能會導致錯誤。您可以通過將瀏覽器的會話標識傳遞給上傳操作並使用beforeFilter中的該標識開始一個新的會話,如上所示。

此外,Uploader組件還內置了mimetype驗證。但是,無論原始文件的MIME類型如何,Uploadify提供的Flash上​​傳器都會向每個文件發送某種「文件上傳式」MIME類型。我通過直接在Uploader插件的代碼中禁用驗證來解決這個問題。這意味着如果你想驗證上傳文件的mimetypes,你必須在其他地方添加它。

對不起,這是如此模糊,但我不久前做了這個,我不記得所有的細節。不過,我希望這有助於您指出正確的方向。