之前用node.js和websocket 做了一个聊天服务器,客户端是运行在 jsp 中的。
重点来了:产品经理要求我聊天功能加入发送图片的功能,这时候问题来了,$.getJSON只是get请求,上传图片get请求满足不了。
请各位支个招,第一次发贴,谢谢大家。
1
rekey 2015-06-11 11:37:57 +08:00
呃,你确定一下是跨域问题还是 get or post 问题。
|
2
zkd8907 2015-06-11 11:37:58 +08:00
上传图片构造iframe表单,后台返回的结果加callback参数进行回调 =。=
|
3
wy315700 2015-06-11 11:38:35 +08:00
你应该弄一个跨域认证
|
4
kingwrcy 2015-06-11 11:41:02 +08:00
1.jsonp
2.Access-Control-Allow-Origin:* 你要post的,那就是方案2了 |
5
misaka14 OP 是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
|
6
misaka14 OP @rekey 是跨域问题,因为node.js是跑在其他服务器,上传图片的接口也是在node.js中的。而jsp是运行在自己本地的。
|
7
rekey 2015-06-11 11:46:18 +08:00
看情况定,如果IE9以上啥的,cors 吧。很好的。
|
8
zomco 2015-06-11 11:46:30 +08:00 via iPhone
有一种东西,叫cors
|
9
misaka14 OP @rekey 我测试过一个,貌似有时是不管用的。cors是不是只能用 外网IP 的接口吧。如果我自己本地测试,是内网的IP,貌似测试不了的。
只能用IE9以上?那完了,我们公司最低IE8 |
10
tajpure 2015-06-11 11:57:10 +08:00
最近刚解决ajax图片传输跨域的问题,http://www.slideshare.net/SlexAxton/breaking-the-cross-domain-barrier,这里面讲了几种跨域的解决方案。我采用的是CORS,在服务端的response里加入如下包头:
''' response.setHeader("Access-Control-Allow-Origin", "你的域名(在测试的时候你可以使用 * )"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); ''' |
11
yeyeye 2015-06-12 08:31:48 +08:00
我说说理论上可行的方案,啥浏览器都兼容。只要支持iframe和script
首先构建一个表单,上传文件的表单,加入一个字段为随机字符,把这个表单post到iframe里,服务器收到文件,在数据库中记录随机字符和图片的地址。 然后每几秒向图片服务器用jsonp的方式带着那个随机字符查看服务器里是否有这个相关的图片 有的话得到http地址 如果iframe的onload属性可以的话 也可以onload之后再请求 完 简单有效 |
14
mingyun 2015-07-12 20:44:23 +08:00
cors只能在高级浏览器了
|