【发布时间】:2017-08-21 05:18:15
【问题描述】:
我已经在我的网站中集成了 Summernote(使用 Codeigniter 构建)并且对于文本来说它工作正常。但是对于图片上传,就会出现以下问题。
Summernote 将图像读取为 base64。现在这对于小图像效果很好,但是一旦图像很大,由于数据库中 base64 创建的巨大字符串,图像最终不会呈现。
所以我试图将图像保存在我的服务器中,然后使用该图像的链接。
以下是代码: Summernote 的脚本:
<script type="text/javascript">
$(document).ready(function() {
$('#summernote').summernote({
height: 300,
onImageUpload: function(files) {
sendFile(files[0]);
}
});
function sendFile(file) {
data = new FormData();
data.append("files", file);
upload_url = "<?php echo base_url(); ?>" + "general/upload_image";
$.ajax({
data: data,
type: "POST",
url: upload_url,
cache: false,
contentType: false,
processData: false,
success: function(url) {
$(this).summernote("insertImage", url);
}
});
}
});
php upload_image 函数:
public function upload_image()
{
if ($_FILES['file']['name']) {
if (!$_FILES['file']['error']) {
$name = md5(rand(100, 200));
$ext = explode('.', $_FILES['file']['name']);
$filename = $name . '.' . $ext[1];
$destination = 'http://sitename.com/dist/img/blogimg/' . $filename; //change this directory
$location = $_FILES["file"]["tmp_name"];
move_uploaded_file($location, $destination);
echo 'http://sitename.com/dist/img/blogimg/' . $filename;//change this URL
}
else
{
echo $message = 'Ooops! Your upload triggered the following error: '.$_FILES['file']['error'];
}
}
}
现在,当我在summernote中单击插入图像或拖放图像时,控制台中会显示以下错误的多个实例:
>Uncaught TypeError: Cannot read property 'nodeType' of undefined
这就是我想要实现的, 注:此编辑器用于博客。 1. 用户点击插入图片并从他的电脑上传一张图片。 2. 图片在编辑器中显示(但在这一步没有上传到服务器)。 3. 当用户点击提交按钮时,图像应保存为预定义文件夹中的图像文件。 4.当页面呈现时它应该有
<img src="mysite.com/path_to_image">
现在是这样的
<img src="data:image/jpeg;base64,/9j/4AAQSkZJR....">)
请注意,我尝试在回调中使用 onImageUpload,但结果实际上没有发生任何事情,图像既没有上传到编辑器,也没有上传到服务器中的文件夹。
我哪里错了......??请帮我解决这个问题...
【问题讨论】:
-
只是一个建议codeigniter有自己的上传库codeigniter.com/user_guide/libraries/file_uploading.html
-
您最初的 base 64 大小问题可以通过更改为 LongText 来解决
-
@wolfgang1983 应该在upload_image() 函数中使用上传库对吗?您能否提供一个示例代码来展示如何使用此上传库处理 POST 数据。 ??我没看清楚……
标签: javascript php jquery codeigniter summernote