CKEditor 4.5.0 BETA 文件上传 API 问题
CKEditor 4.5.0 BETA fileUpload API issue
我正在尝试 CKEditor 4.5.0 BETA 因为它允许我在所有浏览器中粘贴剪贴板中的图像,但我找不到任何关于文件上传的文档 API(新?),This Link 中的示例使用了 CKFinder 但我没有,我需要在 PHP 中创建自己的服务器端代码(我正在使用 Larevel 4).
当我尝试上传文件时,请求中的唯一参数是文件(名为 "upload"),如何将我的 CKEditor 实例连接到我的服务器?也许缺少什么?
CKEDITOR.replace('newticket', {
extraPlugins : 'uploadimage,image2',
uploadUrl : '/ckeditor/newticket/uploads',
height : '200px',
toolbar : [
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline' ] },
{ name: 'lists', items: [ 'NumberedList', 'BulletedList', 'Outdent', 'Indent', 'Blockquote' ] },
{ name: 'insert', items: ['Link', '-', 'HorizontalRule'] },
{ name: 'font', items: [ 'Format', '-', 'TextColor', 'BGColor'] }
]
});
编辑 1
我在服务器端使用此代码 (Laravel 4),文件已上传,CKeditor 显示一条消息,说明文件已正确上传,但未将 img 标签添加到文档
public function uploadFilesFromCKeditor() {
if(Input::hasFile('upload')) {
$fileName = sha1(time() . Input::file('upload')->getClientOriginalName()) . '.' . Input::file('upload')->getClientOriginalExtension();
$success = Input::file('upload')->move(public_path() . '/ckeditor/uploads', $fileName);
if($success) {
$jsonResponse = array(
'fileName' => $fileName,
'url' => 'ckeditor/uploads/' . $fileName,
'uploaded' => 'true',
'error' => array(
'message' => ''
)
);
} else {
$jsonResponse = array(
'fileName' => Input::file('upload')->getClientOriginalName(),
'url' => '',
'uploaded' => 'false',
'error' => array(
'message' => 'Error msg'
)
);
}
return Response::json($jsonResponse);
} else {
$jsonResponse = array(
'fileName' => '',
'url' => '',
'uploaded' => 'false',
'error' => array(
'message' => 'error msg'
)
);
return Response::json($jsonResponse);
}
}
由于该功能当时处于测试版,完整教程尚未创建,但您应该可以根据事件文档进行处理。
如果您收到包含文件的单个条目 upload
的请求,则表示您的方法很好,这是已发送的默认请求。如果你想修改它使用 fileUploadRequest
event.
CKEditor 期望收到 JSON 作为响应,因此您需要在服务器端做的就是保存文件(使用 PHP 函数 move_uploaded_file
,请参阅 http://php.net/manual/en/features.file-upload.php) 和 return (echo
) JSON 数据。
您可以找到预期的 JSON 响应格式以及如何处理任何其他响应的示例 here。
我正在尝试 CKEditor 4.5.0 BETA 因为它允许我在所有浏览器中粘贴剪贴板中的图像,但我找不到任何关于文件上传的文档 API(新?),This Link 中的示例使用了 CKFinder 但我没有,我需要在 PHP 中创建自己的服务器端代码(我正在使用 Larevel 4).
当我尝试上传文件时,请求中的唯一参数是文件(名为 "upload"),如何将我的 CKEditor 实例连接到我的服务器?也许缺少什么?
CKEDITOR.replace('newticket', {
extraPlugins : 'uploadimage,image2',
uploadUrl : '/ckeditor/newticket/uploads',
height : '200px',
toolbar : [
{ name: 'clipboard', items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
{ name: 'basicstyles', items: [ 'Bold', 'Italic', 'Underline' ] },
{ name: 'lists', items: [ 'NumberedList', 'BulletedList', 'Outdent', 'Indent', 'Blockquote' ] },
{ name: 'insert', items: ['Link', '-', 'HorizontalRule'] },
{ name: 'font', items: [ 'Format', '-', 'TextColor', 'BGColor'] }
]
});
编辑 1
我在服务器端使用此代码 (Laravel 4),文件已上传,CKeditor 显示一条消息,说明文件已正确上传,但未将 img 标签添加到文档
public function uploadFilesFromCKeditor() {
if(Input::hasFile('upload')) {
$fileName = sha1(time() . Input::file('upload')->getClientOriginalName()) . '.' . Input::file('upload')->getClientOriginalExtension();
$success = Input::file('upload')->move(public_path() . '/ckeditor/uploads', $fileName);
if($success) {
$jsonResponse = array(
'fileName' => $fileName,
'url' => 'ckeditor/uploads/' . $fileName,
'uploaded' => 'true',
'error' => array(
'message' => ''
)
);
} else {
$jsonResponse = array(
'fileName' => Input::file('upload')->getClientOriginalName(),
'url' => '',
'uploaded' => 'false',
'error' => array(
'message' => 'Error msg'
)
);
}
return Response::json($jsonResponse);
} else {
$jsonResponse = array(
'fileName' => '',
'url' => '',
'uploaded' => 'false',
'error' => array(
'message' => 'error msg'
)
);
return Response::json($jsonResponse);
}
}
由于该功能当时处于测试版,完整教程尚未创建,但您应该可以根据事件文档进行处理。
如果您收到包含文件的单个条目 upload
的请求,则表示您的方法很好,这是已发送的默认请求。如果你想修改它使用 fileUploadRequest
event.
CKEditor 期望收到 JSON 作为响应,因此您需要在服务器端做的就是保存文件(使用 PHP 函数 move_uploaded_file
,请参阅 http://php.net/manual/en/features.file-upload.php) 和 return (echo
) JSON 数据。
您可以找到预期的 JSON 响应格式以及如何处理任何其他响应的示例 here。