CKEditor 文件上传在 Yii2 中不起作用
CKEditor file upload not working in Yii2
我正在开发我集成的 Yii2 项目 http://ckeditor.com/demo
现在我想在里面实现file/image上传的功能
这就是我在 Yii2 项目中集成 CKEditor 的方式。
第一步:AppAsset.php
public $js = [
'ckeditor/ckeditor.js',
];
正在从 config/AppAsset
Class
调用 ckeditor.js javascript 文件
第二步:查看
<?= $form->field($model, 'standard_output_information')->textarea(['rows' => 2, 'class'=>'ckeditor']) ?>
第三步:config.js
CKEDITOR.editorConfig = function (config) {
var base_url = window.location.origin;
var pathArray = window.location.pathname.split('/');
var projectUrl = base_url + "/" + pathArray[1] + "/" + pathArray[2] + "/" + pathArray[3] + "/uploads";
config.filebrowserImageBrowseUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload";
config.filebrowserImageUploadUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload";
};
这里我配置了这里提到的ImageBrowserUrl和ImageUploadUrl http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)
第四步:控制器
public function actionUpload() {
echo \yii\helpers\Html::csrfMetaTags();
echo "<pre>";
print_r($_FILES);
print_r($_REQUEST);
exit;
}
我在这里期待上传的图像数据。但是每当我在选择图像后单击 Send it to Server
按钮时,都会出现以下错误。
不确定是config.js配置错误url问题还是Yii2表单提交问题
如有任何帮助,我们将不胜感激。
我认为您对 CRSF 令牌有疑问。在此处阅读有关安全性的更多信息:http://www.yiiframework.com/doc-2.0/guide-security-best-practices.html. The easiest way to get around this is to disable CRSF for that particular action. You can take a look on how to do that here:
与禁用 CSRF 验证相比,使用表单提交令牌以通过服务器端验证要好得多,也更安全。通过使用 javascript:
将隐藏的输入字段注入上传表单可以很容易地完成此操作
$(document).off('click', '.cke_dialog_tabs a[id^="cke_Upload_"]').on('click', '.cke_dialog_tabs a[id^="cke_Upload_"]', function () {
var $forms = $('.cke_dialog_ui_input_file iframe').contents().find('form');
var csrfName = yii.getCsrfParam();
$forms.each(function () {
if (!$(this).find('input[name=' + csrfName + ']').length) {
var csrfTokenInput = $('<input/>').attr({
'type': 'hidden',
'name': csrfName
}).val(yii.getCsrfToken());
$(this).append(csrfTokenInput);
}
});
});
有关此问题的更详细讨论,请参阅 2amigos/yii2-ckeditor-widget, issue #2。这也是代码片段的来源,进行了一些小的调整以涵盖页面上多个小部件的情况。
我正在开发我集成的 Yii2 项目 http://ckeditor.com/demo
现在我想在里面实现file/image上传的功能
这就是我在 Yii2 项目中集成 CKEditor 的方式。
第一步:AppAsset.php
public $js = [
'ckeditor/ckeditor.js',
];
正在从 config/AppAsset
Class
第二步:查看
<?= $form->field($model, 'standard_output_information')->textarea(['rows' => 2, 'class'=>'ckeditor']) ?>
第三步:config.js
CKEDITOR.editorConfig = function (config) {
var base_url = window.location.origin;
var pathArray = window.location.pathname.split('/');
var projectUrl = base_url + "/" + pathArray[1] + "/" + pathArray[2] + "/" + pathArray[3] + "/uploads";
config.filebrowserImageBrowseUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload";
config.filebrowserImageUploadUrl = base_url + "/pcwf" + "/backend" + "/web" + "/businessprocessprofile" + "/upload";
};
这里我配置了这里提到的ImageBrowserUrl和ImageUploadUrl http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)
第四步:控制器
public function actionUpload() {
echo \yii\helpers\Html::csrfMetaTags();
echo "<pre>";
print_r($_FILES);
print_r($_REQUEST);
exit;
}
我在这里期待上传的图像数据。但是每当我在选择图像后单击 Send it to Server
按钮时,都会出现以下错误。
不确定是config.js配置错误url问题还是Yii2表单提交问题
如有任何帮助,我们将不胜感激。
我认为您对 CRSF 令牌有疑问。在此处阅读有关安全性的更多信息:http://www.yiiframework.com/doc-2.0/guide-security-best-practices.html. The easiest way to get around this is to disable CRSF for that particular action. You can take a look on how to do that here:
与禁用 CSRF 验证相比,使用表单提交令牌以通过服务器端验证要好得多,也更安全。通过使用 javascript:
将隐藏的输入字段注入上传表单可以很容易地完成此操作$(document).off('click', '.cke_dialog_tabs a[id^="cke_Upload_"]').on('click', '.cke_dialog_tabs a[id^="cke_Upload_"]', function () {
var $forms = $('.cke_dialog_ui_input_file iframe').contents().find('form');
var csrfName = yii.getCsrfParam();
$forms.each(function () {
if (!$(this).find('input[name=' + csrfName + ']').length) {
var csrfTokenInput = $('<input/>').attr({
'type': 'hidden',
'name': csrfName
}).val(yii.getCsrfToken());
$(this).append(csrfTokenInput);
}
});
});
有关此问题的更详细讨论,请参阅 2amigos/yii2-ckeditor-widget, issue #2。这也是代码片段的来源,进行了一些小的调整以涵盖页面上多个小部件的情况。