ueditor使用(一):跨域上传文件+单图上传回显

事先准备两个文件夹,用于发布到本地服务器 测试,端口号我分别使用了 8011  和 8022,下面也用8011、8022代表这两个文件夹

官网下载解压后目录如下

我们将解压的目录发布到本地服务器(http://192.168.2.57:8011)也就是复制粘贴到 8011 文件夹
根目录新建文件夹  view  用于存放 新建的页面

新建页面 test.html,引入代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>

    </head>
    <body>
        <!-- 加载编辑器的容器 -->
        <script id="container" name="content" type="text/plain">这里写你的初始化内容</script>
        <!-- 配置文件 -->
        <script src="../ueditor.config.js" type="text/javascript" charset="utf-8"></script>
        <!--
            编辑器源码文件
            官方教程中的  解压后并未找到 ueditor.all.js 
            可以引用 _examples 中的 editor_api.js 代替
        -->
        <script src="../_examples/editor_api.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            // 页面初始化编辑器,参数配置见 ueditor.config.js 自带注释
            var ue = UE.getEditor('container', {
                initialFrameHeight: 380, //初始化编辑器高度
                toolbars: [
                    [
                        'source', //源代码
                        'simpleupload', //单图上传
                        'insertimage', //多图上传
                        'insertvideo', //视频
                    ]
                ]
            });
        </script>
    </body>
</html>

浏览器运行 如下图,初始化成功,但会提示  后台配置项返回格式出错,上传功能将不能正常使用!

这里我们打开8011根目录  ueditor.config.js  ,找到 serverUrl  我们以 asp 为例

serverUrl: URL + "asp/controller.asp"  即可正常使用,点击单图上传,上传成功,单浏览器出现404,并未显示图片

点击单图上传发现图片上传成功,但是客户端回执了一个错误的路径

我们只需要到8011目录下找到 config.json

由回执路径可知  url= http://192.168.2.57:8011 + imageUrlPrefix + imagePathFormat,所以

根据我的路径得出 我 需要 改成  "imageUrlPrefix":"/asp/" 就行, 测试成功

如果你的项目对文件目录没有什么要求,那么上面的设置已经够用了

下面就说说跨域上传的方法,选择一项你想用的 服务器 文件

我发布了net版本(http//:192.168.2.57:8022)也就是将 net文件夹中的文件复制粘贴到 8022 ,并发布了IIS

找到8022 的服务配置 config.json  ,将  图片访问前缀 改成  你发布的  路径

找到8011 的 ueditor.config.js,将服务器统一接口路径改成你发布的  服务 路径,如下图

注意js缓存可能导致 serverUrl出错,

net 处理文件上传失败(跨域问题 )https://blog.csdn.net/m0_37894611/article/details/104967370

到这里,文件上传成功,但是回显失败(官方文档有说明:单文件上传是form提交到iframe,然后检测iframe里面的内容来返回结果,官方已经明确说明了单文件上传不能实现跨域上传,就是因为跨域的iframe是获取不到iframe里面的html代码的,所以现在不能获得上传地址)。

关于单图上传回显的解决方法: 转至  https://www.cnblogs.com/hpnet/p/6290452.html  再此记录一下

好了,实现单文件跨域上传。首先要搞懂它的原理,它是提交到iframe去上传,然后监控iframe加载完成后js获取iframe里面的内容也就是json结果来得到图片上传结果。而跨域上传iframe里面的页面和当前页面不是同一个域名就获取不到json了,官方说暂时不支持,其实so easy,用传统的代理页面来解决,就是文件服务器上传成功后,不直接显示结果,而是跳转到 8011 下面来的result.ashx页面来,把结果传递到这个页面上,再输出来,这样iframe就在同一个域名上了,js就能直接获取iframe里面的内容了。

首先在 8011下面添加result.ashx:

<%@ WebHandler Language="C#" Class="UEditorHandler" %>

using System;
using System.Web;
using System.IO;
using System.Collections;

public class UEditorHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var result=context.Request["result"];
        //当然这里最好判断一下result是否安全,不要接收到内容就显示这样会被人利用。
        if(result!=null)
            context.Response.Write(result.ToString());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

因为只有单图上传(也就是简单文件上传)要用iframe方式,所以我们要判断一下,只有简单文件上传才用这种方式。打开ueditor.all.js或者ueditor.all.min.js你页面上调用哪个就打开哪个,搜索<input id="edui_input_  在</form>之前加上:
<input type="hidden" name="issimpleupload" value="true" /> 这样上传后我们好通过获取issimpleupload来判断是不是简单文件上传。

如果没有ueditor.all.js文件的,请到 _src/plugins/simpleupload.js 搜索添加

然后改   8022  的处理文件:app_code里面的Handler.cs打开,第28行的大括号里面加上判断:

if (String.IsNullOrWhiteSpace(jsonpCallback))
        {
            var issimple = Request["IsSimpleUpload"];
            if (issimple != null && issimple.ToString()=="true")
            {
                Response.Redirect("http://192.168.2.57:8011/result.ashx?result=" + json); //把json传递到8011下面去呈现结果。
            }
            Response.AddHeader("Content-Type", "text/plain");
            Response.Write(json);
        }

到此跨域上传图片功能完美实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值