2013-03-27 75 views
5

我在我的表單中有一個類型爲file的字段。當用戶點擊保存圖標時,我想自然地將文件上傳到服務器並將文件名保存到數據庫中。我試着通過回顯文件名來測試它,但它似乎沒有工作。另外,如何將文件名添加到數據庫?它在模型中完成了嗎?謝謝!自定義Joomla組件的文件上傳表單

控制器/ customcom.php

jimport('joomla.filesystem.file');  
class CustomComControllerCustomCom extends JControllerForm 
     { 
      function save() 
      { 
       $file = JRequest::getVar('img_url', null, 'files', 'array'); 

       $filename = JFile::makeSafe($file['name']); 

       echo $filename; 
       } 
     } 

模型/表格/ customcom.xml

<?xml version="1.0" encoding="utf-8"?> 
    <form enctype="multipart/form-data"> 
      <fieldset> 
        <field 
         name="img_url" 
         type="file" 
         label="Image upload" 
         description="" 
         size="40" 
         class="inputbox" 
         default="" 
       /> 
      </fieldset> 
    </form> 

回答

7

就想通了。

正確的方法是

$jinput = JFactory::getApplication()->input; 
$files = $jinput->files->get('jform'); 
$file = $files['img_url']; 

這應該做的伎倆。 在$文件數組,那麼持有以下鍵:

  • 錯誤
  • 大小
  • 不對tmp_name

我已經刪除了我原來的答覆,因爲它是誤導。

3

通過媒體管理器獲得靈感:

只是注意,這部分是很老(重構是在製劑)

// Import dependencies 
jimport('joomla.filesystem.file') 

// Get input 
$input = JFactory::getApplication()->input; 

// Get uploaded file info 
$file_info = $input->files->get('img_url', null); 

// This will hold error 
$error = null; 

// Check if there was upload at all, mime is correct, file size, XSS, whatever... 
if (!MycomponentHelper::canUpload($file_info, $error) 
{ 
    $this->setError('problem: ' . $error); 
    return false; 
} 

// Move uploaded file destination 
JFile::upload($file_info['tmp_name'], $destination);