我在创建基于以下内容的自定义字段的上传机制时遇到问题:libraries / joomla / filesystem / file.php。表单在视图中设置了正确的enctype,它只是没有上传。这是我的组件/ model / fields / uploadfield.php中的代码:
protected function getInput()
{
//Retrieve file details from uploaded file, sent from upload form
$file = JFactory::getApplication()->input->get($this->name, null, 'files', 'array');
//Import filesystem libraries. Perhaps not necessary, but does not hurt
jimport('joomla.filesystem.file');
//Clean up filename to get rid of strange characters like spaces etc
$filename = JFile::makeSafe($file['name']);
//Set up the source and destination of the file
$src = $file['tmp_name'];
$dest = JPATH_COMPONENT . DIRECTORY_SEPARATOR . $filename;
//First check if the file has the right extension, we need jpg only
if ( strtolower(JFile::getExt($filename) ) == 'jpg') {
if ( JFile::upload($src, $dest) ) {
//Redirect to a page of your choice
} else {
//Redirect and throw an error message
}
} else {
//Redirect and notify user file is not right extension
}
return '<input type="file" name="' . $this->name . '" id="' . $this->id . '"' . ' />';
}
我是否在getInput()函数中使用上传机制以正确的方式进行此操作?它应该在模型中吗?我真的很困惑如何使这项工作,一直试图遵循:http://docs.joomla.org/How_to_use_the_filesystem_package,但它忽略了上传代码应该去哪里?
非常感谢
答案 0 :(得分:3)
尝试使用我在其中一个组件上使用的以下内容:
function getInput(){
jimport('joomla.filesystem.file');
$jinput = JFactory::getApplication()->input;
$fileInput = new JInput($_FILES);
$file = $fileInput->get('image', null, 'array');
if(isset($file) && !empty($file['name'])) {
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$data['image']=$filename;
$dest = JPATH_COMPONENT . '/' . $filename;
if ( strtolower(JFile::getExt($filename) ) == 'jpg') {
if(!JFile::upload($src, $dest)) {
return false;
}
}
else {
JError::raiseWarning('', 'File type not allowed!.');
return false;
}
}
return true;
}
请注意,使用以下代码:
$file = JRequest::getVar('image', null, 'files', 'array');
“图片”来自输入字段的名称,如下所示:
<input type="file" id="" name="image" />
因此,请更改为输入字段提供的任何名称。
答案 1 :(得分:1)
好的 - 所以我解决了这个问题:
我在自定义字段文件中使用了getInput()函数,只是在窗体上显示输入字段,并在控制器中创建了一个函数来进行保存。有点像这样:
function save(){
jimport('joomla.filesystem.file');
$jFileInput = new JInput($_FILES);
$theFiles = $jFileInput->get('jform',array(),'array');
$filepath = "DESTINATIONFILEPATH"
JFile::upload( $theFiles['tmp_name']['filename'], $filepath );
return parent::save();
}
只需要解决Joomla 3.0将文件名保存到JInput“jform”数组的方法,以便将文件名更新到数据库。这只会覆盖现有的jform数据:
$jinput = JFactory::getApplication()->input;
$jinput->set('jform',$arraytoadd);
如果有人有兴趣,我在这里问过这个问题: Adding field input to JForm using JInput