ueditor 配置分片上传
时间: 2023-09-04 09:16:18 浏览: 127
ueditor 的分片上传功能需要在后端进行配置。以下是一个简单的 PHP 后端配置示例:
1. 在 ueditor/php/config.json 文件中,将 "imageAllowFiles" 和 "fileAllowFiles" 分别改为 "*",表示允许上传任何类型的文件。
2. 在 ueditor/php/config.php 文件中,添加如下代码:
```php
// 分片上传配置
$config['chunked'] = true; // 开启分片上传
$config['chunkSize'] = 2 * 1024 * 1024; // 每个分片的大小,这里设置为2MB
$config['savePath'] = __DIR__ . '/uploads/'; // 文件保存路径,需要确保该目录存在,并有写入权限
$config['rootPath'] = '/uploads/'; // 文件访问根路径,需要根据实际情况修改
```
3. 在 ueditor/php/controller.php 文件中,添加如下代码:
```php
// 分片上传处理
if ($action == 'uploadfile' && $CONFIG['chunked']) {
$uploader = new \UploaderChunked($config);
$result = $uploader->doUpload();
return json_encode($result);
}
```
4. 在 ueditor/php/Uploader.class.php 文件中,添加如下代码:
```php
// 分片上传处理类
class UploaderChunked extends Uploader
{
public function __construct($config)
{
parent::__construct($config);
}
public function doUpload()
{
if ($this->file['error'] === UPLOAD_ERR_OK) {
$tmpName = $this->file['tmp_name'];
$fileName = $this->file['name'];
$chunk = isset($_POST['chunk']) ? intval($_POST['chunk']) : 0;
$chunks = isset($_POST['chunks']) ? intval($_POST['chunks']) : 1;
$filePath = $this->getFilePath($fileName);
$chunkFile = $filePath . '_' . $chunk . '.part';
// 移动上传的分片文件
move_uploaded_file($tmpName, $chunkFile);
// 检查是否上传完成
for ($i=0; $i<$chunks; $i++) {
$partFile = $filePath . '_' . $i . '.part';
if (!file_exists($partFile)) {
return $this->getErrorMessage('missing_upload_chunk');
}
}
// 合并分片文件
$fp = fopen($filePath, 'wb');
if ($fp === false) {
return $this->getErrorMessage('open_file_failed');
}
for ($i=0; $i<$chunks; $i++) {
$partFile = $filePath . '_' . $i . '.part';
$data = file_get_contents($partFile);
fwrite($fp, $data);
unlink($partFile);
}
fclose($fp);
// 返回成功信息
$fileSize = filesize($filePath);
return array(
"state" => "SUCCESS",
"url" => $this->config['rootPath'] . $this->getFileName($fileName),
"title" => $fileName,
"original" => $fileName,
"size" => $fileSize,
"type" => '.' . pathinfo($fileName, PATHINFO_EXTENSION)
);
} else {
return $this->getErrorMessage($this->file['error']);
}
}
}
```
以上代码实现了将上传的文件分成多个片段进行上传,并在后端进行合并,最终生成完整的文件。需要注意的是,这里仅提供了一个简单的示例,实际情况下可能需要根据具体需求进行修改。
阅读全文