**首先,wangEditor的跨域上传已经不再支持 IE8、9 浏览器。**

----

IE10 及以上浏览器在使用跨域上传时,需要服务器端的配合,对`response`设置以下`head`信息:

```js

response.setHeader("Access-Control-Allow-Origin", "http://localhost:8011"); // 第二个参数填写允许跨域的域名称,不建议直接写 "*"

response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");

response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

// 接收跨域的cookie

response.setHeader("Access-Control-Allow-Credentials", "true");

```

**注意,各个后台语言针对`response`设置`head`信息时,语法可能不同,以上代码是nodejs的设置方式,其他语言请自行修改。**

如果你以上配置都成功了,并且成功实现了跨域上传,可在浏览器的http请求中看到这些head设置信息,如下图:

![](https://box.kancloud.cn/2016-03-21_56ef6c54d06f7.png)

----

以下是一个具体的实例,例如我的前端页面是`localhost:8011`端口,而我的服务器端的上传地址是`http://localhost:8012/upload`。

那么我前端页面中针对编辑器的配置是:

```js

var editor = new wangEditor('editor-trigger');

// 跨域上传

editor.config.uploadImgUrl = 'http://localhost:8012/upload';

// 可以自定义配置 xhr.withCredentials (默认为 true)

editor.config.withCredentials = false;

// 创建编辑器

editor.create();

```

后端代码示例如下(使用 nodejs 编写,[点击这里](https://github.com/wangfupeng1988/wangEditor/blob/master/server-for-cros.js)查看线上源码):

```js

// 以下是实现跨域的服务器端示例代码:

// ------------------------------------------------

// nodejs API 参考:http://nodeapi.ucdok.com/#/api/

// 需要本地安装 formidable ,参见 https://github.com/felixge/node-formidable

var formidable = require('formidable');

var http = require('http');

var fs = require('fs');

var url = require('url');

var path = require('path');

// 文件将要上传到哪个文件夹下面

var uploadfoldername = 'uploadfiles';

var uploadfolderpath = __dirname + '/' + uploadfoldername;

// var server = '192.168.1.2';

var server = 'localhost';

var port = 8012;

http.createServer(function (req, res) {

var reqMethod = req.method.toLowerCase();

// ----------------------用 '/upload' 这个路由来处理文件上传----------------------

if (req.url === '/upload' && (reqMethod === 'post' || reqMethod === 'options')) {

// 设置允许跨域的域名称

res.setHeader("Access-Control-Allow-Origin", "http://localhost:8011");

res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");

res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

// ----- 情况1:跨域时,先发送一个options请求,此处要返回200 -----

if (reqMethod === 'options') {

console.log('options 请求时,返回 200');

// 返回结果

res.writeHead(200, {

'Content-type': 'text/html'

});

res.end('options OK');

return;

}

// ----- 情况2:发送post请求,上传图片 -----

console.log('定位到 /upload 路由');

// 使用第三方的 formidable 插件初始化一个 form 对象

var form = new formidable.IncomingForm();

// 处理 request

form.parse(req, function (err, fields, files) {

if (err) {

return console.log('formidable, form.parse err');

}

console.log('formidable, form.parse ok');

var item;

// 计算 files 长度

var length = 0;

for (item in files) {

length++;

}

if (length === 0) {

console.log('files no data');

return;

}

for (item in files) {

var file = files[item];

// formidable 会将上传的文件存储为一个临时文件,现在获取这个文件的目录

var tempfilepath = file.path;

// 获取文件类型

var type = file.type;

// 获取文件名,并根据文件名获取扩展名

var filename = file.name;

var extname = filename.lastIndexOf('.') >= 0

? filename.slice(filename.lastIndexOf('.') - filename.length)

: '';

// 文件名没有扩展名时候,则从文件类型中取扩展名

if (extname === '' && type.indexOf('/') >= 0) {

extname = '.' + type.split('/')[1];

}

// 将文件名重新赋值为一个随机数(避免文件重名)

filename = Math.random().toString().slice(2) + extname;

// 构建将要存储的文件的路径

var filenewpath = uploadfolderpath + '/' + filename;

// 将临时文件保存为正式的文件

fs.rename(tempfilepath, filenewpath, function (err) {

// 存储结果

var result = '';

if (err) {

// 发生错误

console.log('fs.rename err');

result = 'error|save error';

} else {

// 保存成功

console.log('fs.rename done');

// 拼接图片url地址

result = 'http://' + server + ':' + port + '/' + uploadfoldername + '/' + filename;

}

// 返回结果

res.writeHead(200, {

'Content-type': 'text/html'

});

res.end(result);

}); // fs.rename

} // for in

});

} else {

// ---------------------- 其他路由,直接作为静态文件返回,如通过url获取图片 ----------------------

var pathname = url.parse(req.url).pathname;

var filepath = path.join(__dirname, pathname);

fs.readFile(filepath, function (err, file) {

if (err) {

res.writeHead(404);

console.log('response file error: ' + filepath);

res.end('404 NOT FOUND...');

return;

}

if (filepath.slice(filepath.lastIndexOf('.') - filepath.length) === '.css') {

// 兼容IE

res.writeHead('200', {'Content-type': 'text/css'});

} else {

res.writeHead('200');

}

console.log('response file success: ' + filepath);

res.end(file);

});

}

}).listen(port);

// 监听 localhost port 端口

console.log('server start at http://' + server + ':' + port);

```

**注意,**请看源码中这块代码:

```js

// ----- 情况1:跨域时,先发送一个options请求,此处要返回200 -----

if (reqMethod === 'options') {

console.log('options 请求时,返回 200');

// 返回结果

res.writeHead(200, {

'Content-type': 'text/html'

});

res.end('options OK');

return;

}

```

浏览器在跨域上传时,会先发送一个`options`的请求,来验证浏览器是否可以支持跨域,然后再发送一个`post`请求来上传文件。如果你在使用过程中遇到了类似的问题,可做参考。

wangeditor 请求头_跨域上传 · wangEditor2使用手册 · 看云相关推荐

  1. wangeditor 请求头_wangEditor编辑器添加上传视频功能

    正在帮一个朋友的项目进行一些修改,该项目中使用的是 wangEditor 富文本编辑器. 该编辑器的上传视频有个缺陷,不能手动上传,这是目前的效果图 朋友要求加一个上传视频的功能. 网上的解决方案的文 ...

  2. java 跨域上传_java使用webuploader实现跨域上传详解

    前言 项目中使用webuploader进行文件上传,需要用到跨域,查看webuploader的issues发现是支持上传的,但是他们写的回复都是不清不白的,有点迷糊:想了半天才知道咋回事,也可能是我比 ...

  3. 全网最直接简单。百度富文本跨域上传文件到文件服务器

    看了很多文章其实也有很多办法,实现跨域上传.现在讲我目前所用的方法.只实现的多图上传.单图上传失败. 接下来必须认真的看完文章. 当前我用的 版本为UEditor1.4.3. 这里主要是实现重写接收文 ...

  4. php js跨域上传文件,Jquery实现跨域异步上传文件步骤详解

    这次给大家带来Jquery实现跨域异步上传文件步骤详解,Jquery实现跨域异步上传文件的注意事项有哪些,下面就是实战案例,一起来看一下. 先说明白 这个跨域异步上传功能我们借助了Jquery.for ...

  5. 解决使用elementUI框架el-upload跨域上传时session丢失问题

    解决使用elementUI框架el-upload跨域上传时session丢失问题 参考文章: (1)解决使用elementUI框架el-upload跨域上传时session丢失问题 (2)https: ...

  6. springboot上传图片到宝塔Linux(本地上传和跨域上传)

     1.浏览器访问宝塔面板的图片需要的配置-- 点击文件www-->server-->tomcat-->conf-->server.xml 可以自己修改,请在宝塔面板和服务器上放 ...

  7. wangeditor 请求头_富文本编辑框wangEditor

    由于项目需要,在网上找了个富文本编辑框wangEditor,抱着试一试的态度用了一下,原以为这款个人开发维护的插件会有不少bug,使用之后经过我们测试人员全方位的测试检验,基本符合需求,并且较之前使用 ...

  8. SpringMvc+ajax实现文件跨域上传

    最近开始学习SpringMVC框架,在学习数据绑定的时候,发现可以使用@RequestParam注解绑定请求数据,实现了文件上传.但是如果一个项目是前后端分离的,前端系统向后端服务上传文件该怎么解决了 ...

  9. java后台图片跨域上传

    跨域的原因 跨域的实现原理 本地服务器源码 图片服务器源码 测试 本地服务器 跨域的原因   在项目开发的过程中,我们经常需要用到图片上传操作,传统的做法是我们将其上传到项目的所在目录中,比如说项目的 ...

最新文章

  1. .net课堂流水账_20110118
  2. 慎重选型:PG还是MySQL?Uber的案例不能作为参考!
  3. XamarinEssentials教程设置首选项Preferences的值
  4. Sql Server相关报错解决
  5. 伯努利分布方差_统计知识(4)——分布
  6. Elasticsearch文档的CRUD
  7. vue-cli打包后怎么修改服务器地址实践有效
  8. 【README2】动态规划之斐波那契数列说明重叠子问题如何解决
  9. 实操Tiktok一个月告诉你,10万粉丝轻松拿下?
  10. java token身份认证_java – 基于Spring Security Token的身份验证
  11. python数据分析与挖掘实战pdf_《Python数据分析与挖掘实战》PDF+完整源码
  12. cadence软件下载linux,Red Hat Linux 9.0下安装Cadence IC5.0
  13. 金蝶服务器连接协议,k3金蝶客户端连接服务器配置
  14. 常用十六进制颜色对照表
  15. html5视频自动轮播,HTML5教程 可自动轮播的旋转木马插件
  16. 佳能打印机imageRUNNER系列 2206AD驱动安装
  17. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学计算机工程全美专业排名
  18. 【理财】指数基金投资指南
  19. Dubbo Spring Cloud 逆向分析服务注册事件变化的处理过程
  20. 五种经典卷积神经网络

热门文章

  1. 《如何搭建小微企业风控模型》第十节 单变量分析(下)节选
  2. 树的合并 connect
  3. springmvc 静态资源 配置
  4. 封装scrollView 循环滚动,tableViewCell(连载) mvc
  5. 新手 Spring 疑惑
  6. Python xlwt : More than 4094 XFs (styles) 解决方法
  7. 自学Java第一周的总结
  8. 细谈最近上线的Vue2.0项目(一)
  9. Java的“影子克隆”和“深度克隆”
  10. 【转】【51CTO 网+】怎样做一款让用户来电的产品