当前位置:网站首页>Laravel中使用 Editor.md 上传图片如何处理?
Laravel中使用 Editor.md 上传图片如何处理?
2022-06-23 03:51:00 【曼巴童鞋】
最近在自己新建的博客后台中使用Editor.md作为发布文章的编辑器,后来在做上传图片的时候遇到了一些难题,就是提交的表单中没有Token,无法通过Laravel的VerifyCsrfToken中间件检查。本文将讲解如何解决这个问题。
Editor.md 主要特性
- 支持“标准”Markdown / CommonMark和Github风格的语法,也可变身为代码编辑器;
- 支持实时预览、图片(跨域)上传、预格式文本/代码/表格插入、代码折叠、搜索替换、只读模式、自定义样式主题和多语言语法高亮等功能;
- 支持ToC(Table of Contents)、Emoji表情、Task lists、@链接等Markdown扩展语法;
- 支持TeX科学公式(基于KaTeX)、流程图 Flowchart 和 时序图 Sequence Diagram;
- 支持识别和解析HTML标签,并且支持自定义过滤标签解析,具有可靠的安全性和几乎无限的扩展性;
- 支持 AMD / CMD 模块化加载(支持 Require.js & Sea.js),并且支持自定义扩展插件;
- 兼容主流的浏览器(IE8+)和Zepto.js,且支持iPad等平板设备;
- 支持自定义主题样式;
Github下载地址:https://github.com/pandao/editor.md
前端js配置
/* 配置editormd */
var editor = editormd("editormd", {
path: "{
{ asset('/editor.md/lib/') }}",
height: 700,
syncScrolling: "single",
toolbarAutoFixed: false,
saveHTMLToTextarea: false,
imageUpload: true,
imageFormats : ["jpg","jpeg","gif","png","bmp","webp"],
imageUploadURL:"{
{url('backend/uploadimage')}}"
});方法和路由
public function uploadimage(Request $request)
{
$message='';
if (!$this->disk->exists('/article')) {
$message = "article 文件夹不存在,请先创建";
}else{
$pathDir=date('Ymd');
if(!$this->disk->exists('/article/'.$pathDir)){
$this->disk->makeDirectory('/article/'.$pathDir);
}
}
if($request->file('editormd-image-file')){
$path="uploads/article/".$pathDir;
$pic = $request->file('editormd-image-file');
if($pic->isValid()){
$newName=md5(time() . rand(0, 10000)).".".$pic->getClientOriginalExtension();
if($this->disk->exists($path.'/'.$newName)){
$message = "文件名已存在或文件已存在";
}else{
if($pic->move($path,$newName)){
$url = asset($path.'/'.$newName);
}else{
$message="系统异常,文件保存失败";
}
}
}else{
$message = "文件无效";
}
}else{
$message="Not File";
}
$data = array(
'success' => empty($message) ? 1 : 0, //1:上传成功 0:上传失败
'message' => $message,
'url' => !empty($url) ? $url : ''
);
header('Content-Type:application/json;charset=utf8');
exit(json_encode($data));
}Route::group(['prefix' => 'backend'], function () { Route::post('uploadimage',['uses'=>'Backend\[email protected]']); });
上传报错
我们可以发现会出现500错误,这是由Laravel 的TokenMismatchException异常导致的,也就是Laravel默认开启了防CSRF,而Editor.md 的上传表单中并没有包含token,所以才会出现这个错误。
解决方法
当我们点击上传图片的时候会弹出上传框,这个就是上传的表单,我们可以用调试器查出这是请求了image-dialog.js,具体路径为editor.md/plugins/image-dialog/image-dialog.js。我们可以对其中的var dialogContent变量进行就修改。
具体的修改代码
if (settings.crossDomainUpload)
{
action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-image-dialog-" + guid;
}
var csrfToken = $('meta[name="_token"]').attr('content');
var csrfField = "";
if (csrfToken) {
csrfField = "<input type='hidden' name='_token' value='" + csrfToken + "' />";
}- 在if(settings.crossDomainUpload)结束后加上这5行代码,接下来,将csrfField 变量加入到下面的代码中。
var dialogContent = ( (settings.imageUpload) ? "<form action=\"" + action + "\" target=\"" + iframeName + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"" + classPrefix + "form\">" : "<div class=\"" + classPrefix + "form\">" ) +
( (settings.imageUpload) ? "<iframe name=\"" + iframeName + "\" id=\"" + iframeName + "\" guid=\"" + guid + "\"></iframe>" : "" ) +
"<label>" + imageLang.url + "</label>" +
"<input type=\"text\" data-url />" + (function () {
return (settings.imageUpload) ? "<div class=\"" + classPrefix + "file-input\">" +
"<input type=\"file\" name=\"" + classPrefix + "image-file\" accept=\"image/*\" />" +
csrfField +
"<input type=\"submit\" value=\"" + imageLang.uploadButton + "\" />" +
"</div>" : "";
})() +
"<br/>" +
"<label>" + imageLang.alt + "</label>" +
"<input type=\"text\" value=\"" + selection + "\" data-alt />" +
"<br/>" +
"<label>" + imageLang.link + "</label>" +
"<input type=\"text\" value=\"http://\" data-link />" +
"<br/>" + csrfField +
( (settings.imageUpload) ? "</form>" : "</div>");- 然后在请求的页面头部加上这行代码
<meta name="_token" content="{
{ csrf_token() }}"/>这样再次请求上传图片就可以把token带过去。
边栏推荐
- Pta:6-29 application of virtual base classes - people, teachers and students
- Flutter series: wrap in flutter
- PTA:7-60 宠物的生长
- Pta:6-30 time addition
- Analysis on the current situation of the Internet of things in 2022
- PTA:7-31 期刊收费
- How node+express operates cookies
- How to use shell script to monitor file changes
- Tiktok x-bogus and_ Signature parameter analysis
- 396. 矿场搭建
猜你喜欢
随机推荐
If you want to understand PostgreSQL, you must first brush the architecture
Introduction and use of MySQL view
395. 冗余路径
Leetcode 1208. Try to make the strings equal as much as possible (finally solved, good night)
第二次作业笔记
Introduction to deep learning
2022年起重机械安全管理考试题库及答案
X24cxx series EEPROM chip C language universal reading and writing program
composer按装laravel
Please use the NLTK Downloader to obtain the resource
Distance measure - cosine distance
PTA:7-64 该日是该年的第几天
TS advanced infer
Abnova 荧光染料 510-M 链霉亲和素方案
Deploying Apache pulsar on kubesphere
win10查看my.ini路径
32单片机一个变量多个.c里使用
Online JSON to CSharp (c) class tool
Halcon知识:binocular_disparity 知识
Background ribbon animation plug-in ribbon js









