您的位置:首页 > 其它

Joomla!上传中文文件

2016-01-04 10:18 309 查看
国外的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()));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: