文件上传添加到Joomla管理组件(Add File Uploader to Joomla Admi

2019-09-24 03:57发布

我按到Joomla引导使Joomla管理组件- http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Developing_a_Basic_Component

在我需要有文件上传这让用户上传单个文件。

在管理员\分量\ com_invoicemanager \型号\表格\ invoicemanager.xml我已经定义

<field name="invoice" type="file"/>

在控制器管理员\分量\ com_invoicemanager \控制器\ invoicemanager.php我尝试检索文件象下面这样。 但它不工作(不能检索文件)

我在哪里做错了?

我怎样才能得到文件并将其保存在磁盘上?

class InvoiceManagerControllerInvoiceManager extends JControllerForm
{
    function save(){
        $file = JRequest::getVar( 'invoice', '', 'files', 'array' );
        var_dump($file);
        exit(0);
    }
}

Answer 1:

请确保您已包含enctype="multipart/form-data"形式的文件被提交。 这是一个常见的错误

/// Get the file data array from the request.
$file = JRequest::getVar( 'Filedata', '', 'files', 'array' ); 

/// Make the file name safe.
jimport('joomla.filesystem.file');
$file['name'] = JFile::makeSafe($file['name']);

/// Move the uploaded file into a permanent location.
if (isset( $file['name'] )) {

/// Make sure that the full file path is safe.
$filepath = JPath::clean( $somepath.'/'.strtolower( $file['name'] ) );

/// Move the uploaded file.
JFile::upload( $file['tmp_name'], $filepath );}


Answer 2:

想我找到了解决办法:)

$file = JRequest::getVar('jform', null, 'files', 'array'); 

节省部分就是这里所说的- http://docs.joomla.org/Secure_coding_guidelines



Answer 3:

对于从组件上传文件,你需要编写代码在控制器文件,你可以扩展save()方法。 检查下面给出的代码 -

public function save($data = array(), $key = 'id')
{
    // Neccesary libraries and variables
    jimport('joomla.filesystem.file');

    //Debugging
    ini_set("display_error" , 1);
    error_reporting(E_ALL);

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

    // Get posted data
    $data  = $jinput->get('jform', null, 'raw');
    $file  = $jinput->files->get('jform');

    // renaming the file
    $file_ext=explode('.',JFile::makeSafe($file['invoice']['name'])); // invoice - file handler name
    $filename = round(microtime(true)) . '.' . strtolower(end($file_ext));
    // Move the uploaded file into a permanent location.
    if ( $filename != '' ) {

        // Make sure that the full file path is safe.
        $filepath = JPath::clean( JPATH_ROOT."/media/your_component_name/files/". $filename );

        // Move the uploaded file.
        if (JFile::upload( $file['invoice']['tmp_name'], $filepath )) {
              echo "success :)";
        } else {
              echo "failed :(";
        }

        $data['name'] =  $filename ; // getting file name
        $data['path'] =  $filepath ; // getting file path
        $data['size'] =  $file['invoice']['size'] ; // getting file size
    }
    JRequest::setVar('jform', $data, 'post');
    $return = parent::save($data);
    return $return;
}


Answer 4:

的Joomla 2.5&3的风格:

$app = JFactory::getApplication();
$input = $app->input;
$file= $input->files->get('file');

if(isset($file['name']))
{
    jimport('joomla.filesystem.file');
    $file['name'] = strtolower(JFile::makeSafe($file['name']));
    $fileRelativePath = '/pathToTheRightFolder/'.$file['name'];
    $fileAbsolutePath = JPath::clean( JPATH_ROOT.$fileRelativePath);
    JFile::upload( $file['tmp_name'], $fileAbsolutePath );
}


Answer 5:

http://docs.joomla.org/How_to_use_the_filesystem_package

有一个完整的上传样本。

小样本其中admin选择文件类型或全部进入用户访问的形式上传。 文件夹中的Joomla目录或绝对路径上传文件。 只有选定的用户访问形式上传。



文章来源: Add File Uploader to Joomla Admin Component