jQuery File Upload跨域上传

  最近在做一个一手粮互联网项目,方案为前后端分离,自己负责前端框架,采用了Requirejs+avalonjs+jquery三个框架完成。

  前后端通过跨域实现接口调用,中间也发现了不少问题,尤其是在富文本编辑器和上传插件跨域的处理过程中,费劲了脑汁,总算解决了。

  上传选择了jQuery File Upload,兼容性还是相对不错,并且支持跨域,但是没有一个完整的跨域Demo,只能看源码找帮助。

  下载地址:https://github.com/blueimp/jQuery-File-Upload

  页面实现方法:

  页面引入:

  <link rel="stylesheet" type="text/css" href="../../src/widget/jQueryFileUpload/css/jquery.fileupload.css">
  <link rel="stylesheet" type="text/css" href="../../src/widget/jQueryFileUpload/css/jquery.fileupload-ui.css">
  <script type="text/javascript" src=".../../src/widget/jQueryFileUpload/js/vendor/jquery.ui.widget.js"></script>
  <script type="text/javascript" src=".../../src/widget/jQueryFileUpload/js/jquery.iframe-transport.js"></script>
  <script type="text/javascript" src=".../../src/widget/jQueryFileUpload/js/jquery.fileupload.js"></script>

 
上传页面
  <input id="fileupload" type="file" name="files" multiple>
 1 $('#fileupload').fileupload({
 2             url: config.getUrl()+"upload!upload.do",
 3             type:"POST",
 4             dataType:"json",
 5             autoUpload : true,
 6             acceptFileTypes: /(\.|\/)(jpe?g|png)$/i,
 7             formData: {model:1},
 8             forceIframeTransport: true,
 9             redirectParamName:"callUrl",
10             redirect:"http://"+window.location.host+"/app/callupload.html?",//回调页面
11             done: function (e, data) {
12                 $.each(data.result.files, function (index, file) {
13                     model.fileVO.push({attach_root_id:file.id,file_path:file.url});
14                 });
15             },
16             fail:function(e,data){
17                 console.log("上传失败:"+data.errorThrown);
18             }
19         });
View Code

  创建一个回调页面callupload.html

<body>
    <script type="text/javascript">
        document.body.innerText=document.body.textContent=decodeURIComponent(window.location.search.slice(1));
    </script>
</body>
View Code

  上传后台:

1 string result = file.FileName;
2              context.Response.Headers.Add("Cache-Control", "no-cache");
3              context.Response.AddHeader("Access-Control-Allow-Origin", "*");
4              context.Response.AddHeader("Access-Control-Allow-Headers", "x-requested-with");
5              context.Response.AddHeader("Location", callUrl + "?msg=" + result);
6              context.Response.Redirect(callUrl + "?msg=" + result); 
View Code

  

欢迎大家来交流!

喜欢H5,web开发的朋友可以加群:374166122

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
El-Upload 是 Element UI 提供的一个用于文件上传的功能组件,当在前后端分离的应用中遇到跨域问题时,可能会影响到文件的上传跨域(CORS)限制了浏览器如何处理来自不同源的HTTP请求。当从一个域名向另一个域名发送数据时,浏览器会默认阻止这种行为以防止恶意攻击。 为了解决 El-Upload跨域问题,你可以采用以下几种方法: 1. **服务器设置**: - 在后端服务器上设置响应头 `Access-Control-Allow-Origin`,指定允许哪些源进行访问。例如,如果所有来源都可以,可以设置为 `*`;如果仅限特定源,添加该源的 URL。 ```shell Access-Control-Allow-Origin: * ``` 2. **代理服务器**: 如果你无法直接更改后端配置,可以在前端设置一个代理服务器(如 Nginx 或 Node.js 的 `cors` 中间件),转发请求到实际服务器。这样,文件上传请求会先经过代理服务器,跨域问题会在代理处解决。 3. **JSONP**: 这是早期的一种跨域策略,但现代浏览器对 JSONP 支持有限,且不安全。只适用于同源策略下。 4. **CORS Preflight 请求**: 对于 POST 或 PUT 等方法,浏览器会发送一个预检请求(OPTIONS)来检查是否允许跨域。在服务器端,确保处理了这个预检请求并返回正确的响应。 5. **使用 CORS 客户端库**: 有些情况下,你可能需要在前端代码中处理 CORS,例如使用 `axios` 或者 `fetch` 的相应选项,但这是低优先级的解决方案。 如果你遇到了具体的技术问题,比如配置服务器响应头或设置代理,记得提供详细的问题描述以便我能给出更准确的帮助。接下来的问题是: 1. 你使用的后端语言和框架是什么? 2. 你当前的服务器设置允许什么样的跨域请求? 3. 你使用的是静态文件服务器还是有动态处理能力的服务器?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值