Joomla!上传中文文件

来源:互联网 发布:淘宝客服热线 编辑:程序博客网 时间:2024/06/02 09:34

国外的CMS系统一大问题就是上传中文附件。要么不支持上传,要么传上去不支持链接。


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()));        }    }




0 0
原创粉丝点击