Joomla!上传中文文件
2016-01-04 10:18
309 查看
国外的CMS系统一大问题就是上传中文附件。要么不支持上传,要么传上去不支持链接。
Joomla使用jce可以解决这个问题。
通过jce上传文件时,自动重命名,去掉中文即可。
在Joomla\components\com_jce\editor\libraries\classes\browser.php中,将upload函数中$name 重命名。
Joomla使用jce可以解决这个问题。
通过jce上传文件时,自动重命名,去掉中文即可。
在Joomla\components\com_jce\editor\libraries\classes\browser.php中,将upload函数中$name 重命名。
/** * Upload a file. * @return array $error on failure or uploaded file name on success */ public function upload() { // Check for request forgeries WFToken::checkToken() or die(); // check for feature access if (!$this->checkFeature('upload')) { JError::raiseError(403, 'Access to this resource is restricted'); } $filesystem = $this->getFileSystem(); jimport('joomla.filesystem.file'); header('Content-Type: text/json;charset=UTF-8'); header("Expires: Wed, 4 Apr 1984 13:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M_Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // get uploaded file $file = JRequest::getVar('file', '', 'files', 'array'); // validate file data $this->validateUploadedFile($file); // get file name $name = JRequest::getVar('name', $file['name']); // decode name $name = rawurldecode($name); // check name if (WFUtility::validateFileName($name) === false) { throw new InvalidArgumentException('Upload Failed: The file name contains an invalid extension.'); } // check file name WFUtility::checkPath($name); // get extension from file name $ext = WFUtility::getExtension($file['name']); // trim extension $ext = trim($ext); // check extension exists if (empty($ext) || $ext === $file['name']) { throw new InvalidArgumentException('Upload Failed: The file name does not contain a valid extension.'); } // strip extension $name = WFUtility::stripExtension($name); // make file name 'web safe' // $name = WFUtility::makeSafe($name, $this->get('websafe_mode', 'utf-8'), $this->get('websafe_spaces'), $this->get('websafe_textcase')); //此处将makesafe改为直接用时间命名,纯数字,安全又可用 $name = date('Ymd-His-', time()).rand(0,999); // check name if (WFUtility::validateFileName($name) === false) { throw new InvalidArgumentException('Upload Failed: The file name contains an invalid extension.'); } // target directory $dir = JRequest::getVar('upload-dir'); // deocode directory $dir = rawurldecode($dir); // check destination path WFUtility::checkPath($dir); $upload = $this->get('upload'); // Check file number limits if (!empty($upload['total_files'])) { if ($filesystem->countFiles($dir, true) > $upload['total_files']) { throw new InvalidArgumentException(WFText::_('WF_MANAGER_FILE_LIMIT_ERROR')); } } // Check total file size limit if (!empty($upload['total_size'])) { $size = $filesystem->getTotalSize($dir); if (($size / 1024 / 1024) > $upload['total_size']) { throw new InvalidArgumentException(WFText::_('WF_MANAGER_FILE_SIZE_LIMIT_ERROR')); } } // add random string if ($upload['add_random']) { $name = $name . '_' . substr(md5(uniqid(rand(), 1)), 0, 5); } // rebuild file name - name + extension $name = $name . '.' . $ext; // create a filesystem result object $result = new WFFileSystemResult(); $complete = false; $contentType = JRequest::getVar('CONTENT_TYPE', '', 'SERVER'); // relative path $relative = WFUtility::makePath($dir, $name); // Only multipart uploading is supported for now if ($contentType && strpos($contentType, "multipart") !== false) { $result = $filesystem->upload('multipart', trim($file['tmp_name']), $dir, $name); if (!$result->state) { if (empty($result->message)) { $result->message = WFText::_('WF_MANAGER_UPLOAD_ERROR'); } $result->code = 103; } @unlink($file['tmp_name']); $complete = true; } else { $result->state = false; $result->code = 103; $result->message = WFText::_('WF_MANAGER_UPLOAD_ERROR'); $complete = true; } // upload finished if ($complete) { if ($result instanceof WFFileSystemResult) { if ($result->state === true) { $this->setResult($this->fireEvent('onUpload', array($result->path, $relative))); $this->setResult(basename($result->path), 'files'); } else { $this->setResult($result->message, 'error'); } } die(json_encode($this->getResult())); } }
相关文章推荐
- Ajax学习总结(1)——Ajax实例讲解与技术原理
- 彻底理解position与anchorPoint
- leetcode1--Two Sum
- jqGrid Tree
- 从0到1
- [借鉴] Android简便通用的SimpleBaseAdapter
- arch中yaourt的安装和使用
- MYSQL general tablespace
- mysql profile及其对应表使用
- 判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
- 可以展开的ListView实现
- android中的style部分属性值介绍
- Win7+Cygwin+Ns2.35 完全安装指南
- 黑盒测试用例设计方法之等价类划分
- OnCreate PreCreateWindow PreSubclassWindow
- javascript判断对象是否为空的一则函数
- AspNet MVC中各种上下文理解
- 微信测试订阅号开发错误总结
- $.parseJSON(data)只支持标准的JSON
- lag 和lead 函数