java文件上传单跨域_跨域文件上传解决方案

文件上传在项目中是必不可少的一个环节。一般而言,只要有一个上传页面就可以了  图片直接上传到网站下面。

但是当项目较多,或者项目太大 有好多需要上传文件的需求时,一个通用的文件上传组件就很有必要了。

而且我需要的是文件上传之后是在单独的服务器上(外在体现就是网站与图片不是同一个域名)

这样文件上传页面与当前网站就需要跨域进行上传操作了。

上传过程没有问题,但是上传结束之后的回调操作因为不能跨域存取值而无法进行。

通过对网上一些文章的整理,方案如下

调用文件上传组件的页面(url=http://localhost:2565/.....)

document.querySelector("#fileform").submit();

}functionuploadCallBack(rst) {

document.querySelector("#btnUpload").style.backgroundColor= "";//上传结束按钮颜色回复

console.log(rst);

}

form的target要指定一个隐藏的iframe,这样当前页面才不会因为上传图片而刷新。

实际上就相当于在隐藏的iframe中打开action指定的链接并把form中的数据post过去

至于action的链接中有个参数cb,这个cb的链接在整个操作中至关重要:它是上传结束后回调操作的第一步。

上传文件的后台代码(http://localhost:13124/Upload/FileHandler.ashx)

private const int MAX_UPLOAD_SIZE = 2;///

///上传文件

/// fileSelector是前台代码中文件控件的name///

///

public stringUploadFile(HttpRequest req ,HttpResponse res)

{if (req.Files["fileSelector"].ContentLength > MAX_UPLOAD_SIZE * 1024 * 1024)

{return String.Format("请上传{0}M以内的文件。", MAX_UPLOAD_SIZE);

}string uploadFileName = req.Files["fileSelector"].FileName;string path =HttpContext.Current.Server.MapPath(uploadFileName);

req.Files["fileSelector"].SaveAs(path);return "";

}///

///上传结束后要重定向到指定链接///

///

public voidProcessRequest(HttpContext context)

{string result =UploadFile(context.Request, context.Response);if(String.IsNullOrEmpty(result))

{

result= "上传成功";

}string cbSrc = context.Request["CB"];

context.Response.Redirect(cbSrc);

}

注意:cb指定的上传结束后的链接与调用上传组件的页面是同源的。

cb指定的页面(http://localhost:2565/fileUploadCB.htm)

parent.uploadCallBack("上传成功!");

该页面只是起到一个中转的作用,用于上传结束之后将结果提供给主页面,并执行回调函数。

上面给出的只是基本方案。具体的话  还有很多事情要做,上传时传的参数还是要研究一下的  因为这决定了文件的分类,用户归属等。

大部分工作也没必要自己写,有很多成熟的上传插件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值