asp.net mvc 文件跨域上传,接收返回结果

在系统中我们可能有各种各样的文件上传,这样我们可能会把文件模块单独部署一台服务器,这样在上传时就会遇到跨域问题。我们可以先上传到服务端然后通过httpClient等技术再上传到文件服务器,这样就不会存在跨域问题,但是这样多出了服务器中转的一个步骤,现在我们说一下如何在客户端直接跨域上传到文件服务器。

1.文件服务器部署一个文件上传接口(实现技术:webapi,webservice,mvc等等)

文件上传接口示例如下(MVC方式):

/// <summary>
/// 上传接口
/// </summary>
/// <param name="uploadPath">保存文件虚拟路径</param>
/// <returns></returns>
public ActionResult Upload(string uploadPath)
{
var result = string.Empty;
//获取上传的文件集合,支持多文件上传
var files = Request.Files;
//将虚拟路径转成物理文件路径
var filePath = Server.MapPath(uploadPath);
//判断物理路径是否存在,不存在则创建
if (!Directory.Exists(uploadPath)) Directory.CreateDirectory(filePath);
foreach (HttpPostedFileBase item in files)
{
//将物理路径和文件名组合成一个完整的路径
filePath = Path.Combine(filePath, item.FileName);
//保存文件到磁盘
item.SaveAs(filePath);
//组合一个浏览器可访问的文件地址
result += Path.Combine("http://", "文件服务器地址", uploadPath, item.FileName) + ",";
}
//返回结果到客户端
return Redirect("客户端接收返回结果的页面路径?result=" + (result.Length > 0 ? result.Substring(0, result.Length - 1) : ""));
}

2.客户端需要有一个接收文件服务器返回结果的中转页面(静态的html页面,此页面必须和系统一起部署到同一域名下面)

2.1 中转页面示例如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传结果中转页面</title>
<script type="text/javascript">
//将域名设置成当前系统域名,上传界面也需要设置成这样,这样上传界面才能获取中转界面处理的结果
document.domain = "当前系统域名地址";
//获取地址中的参数
function getParameter(val) {
//uri格式可能如下:http://当前系统域名地址/接收上传结果中转页面地址?result=http://文件服务器地址/上传路径/文件名1,http://文件服务器地址/上传路径/文件名2,http://文件服务器地址/上传路径/文件名3
var uri = window.location.search;
var re = new RegExp("" + val + "=([^&?]*)", "ig");
return ((uri.match(re)) ? (uri.match(re)[0].substr(val.length + 1)) : null);
}
var upload_callback = function () {
var data = getParameter("s");
var location_hash = location.hash;
if (location_hash != null && location_hash != "" && location_hash) {
var data = location.hash ? location.hash.substring(1) : ‘‘;
document.getElementsByTagName("body")[0].innerHTML = ‘<pre>‘ + unescape(data) + ‘</pre>‘;
} else {
var data = getParameter("s");
document.getElementsByTagName("body")[0].innerHTML = ‘<pre>‘ + unescape(data) + ‘</pre>‘;
}
};
</script>
</head>
<body >
</body>
</html>

2.2 在上传页面中获取中转页面的结果

2.2.1 上传页面示例代码如下:

--上传界面获取中转页面的结果

<script type="text/javascript">
document.domain = "这里必须设置成和中转页面一样的域名";
function iframeLoad() {
var pre = document.getElementById("UploadFiles").contentWindow.document.getElementsByTagName("pre");
if (pre.length > 0) {
alert(pre[0].innerHTML); //这里就是上传的文件地址了
}
}
</script>

--利用iframe实现无刷新上传

<form method="post" action="文件服务器接口地址" enctype="multipart/form-data" target="UploadFiles">
<input type="file" name="imgFile" />
</form>

<iframe style="display: none" name="UploadFiles" id="UploadFiles" ></iframe>

时间: 2024-08-17 17:45:54

asp.net mvc 文件跨域上传,接收返回结果的相关文章

h5 文件跨域上传

var imgUrl = "http://www.xxx.xxxxx.xxxx";$.ajax({ url:imgUrl, type: 'POST', crossDomain: true, jsonp: "jsoncallback", data: formData, contentType: false, //必须 processData: false, //不能用success,否则不执行 complete: function (data) { var data 

Ueditor1.4.3实现跨域上传到独立文件服务器,完美解决单文件和多文件上传!

再写配置方法之前先吐槽一下网上的各种教程,TM没一个有卵用,一群傻屌不会写就别写,写了就要负责. 百度google搜了半天,全是配置什么document.domain,根域名什么的,我只想对你说: 好了,talk is cheap show me the code,言归正传: 首先去ue官网下载1.43版 .net版本,解压之后,把demo文件夹改成web,把net那个文件夹拷贝出来放到web外面,如图: 这样就把编辑器的静态文件和动态文件分离了,动态部分放到文件服务器上,静态部分集成到我们的网

Js 跨域上传文件

代码在github上( https://github.com/andygithubchen/jsUpload ),请结合github上的文件阅读. 主要实现js跨域上传文件,这里的跨域目前只在两个域名所指向的服务器在同一局域网内. 当然,这两种方案都可以做同域名上传. 例如: 192.168.1.60 www.test.cn 192.168.1.61 www.video.cn 如果要在www.test.com域名下上传文件到www.video.com域名下,可以使用下面这两个方案: 方案一(在s

ie8、9跨域上传文件(图片)

前言:新的项目,需要将图片跨域上传到专门的图片服务器上面,而且还要支持ie8/9的跨域上传. 解决:为了解决这个方案踩了很多坑,特此记录.以前收集了一些上传的组件 文件(图片)上传组件 ,各有优劣. 1:因为google在将来的版本不在支持flash了,所以不想使用swf支撑的组件上传 2:尝试了AjaxFileUpload 组件,这个在google跨域直接挂掉了. 3:尝试百度的上传组件,Web Uploader 这个挺不错,支持跨域,但是ie8/9跨域支持不大好,只好放弃了(也有可能是我没有

asp.net mvc ajax.beginform()无法上传文件

Asp.Net Mvc使用Ajax.BeginForm上传文件Request.Files始终为null. 使用jquery.form.js插件能解决问题.asp.net mvc ajax.beginform()无法上传文件

跨域上传文件(还是没有明白)

转: 最近工作中有这样的需求:项目在A机器(假设域名为www.a.com)上跑,资源文件要存储在专门的资源机器B(假设域名为www.b.com),要求在A上传文件到B上同时将上传信息以json格式返回. 由于之前的项目都比较小,也没有这样的需求,基本都是在单机上操作,自然涉及不到跨域的问题,初次遇到这个问题,比较棘手,进行了如下尝试均失败. 尝试一:在A机器上的页面中嵌入一个iframe,iframe的src指向B机器的一个上传页面,这样可以很容易将资源上传到B机器,但是却很难实现“以json格

跨域通信/跨域上传浅析

web项目跨域问题主要包括跨域通信和跨域上传,下面对这两方面分别做一个分析,具体项目中用哪个方案要看项目具体需求. 跨域通信 jsonp hash server proxy window.name cors postmessage redirect jsonp 原理:发起一个GET请求,回调函数带到请求参数中,把数据发送过去 坏处:服务器需要支持jsoncallback参数 好处:业界比较通用的方案,包括打点等操作都可以用类似技术 浏览器支持:chrome/firefox/safari/oper

从Ueditor跨域上传,总结的一次跨域上传的爬坑经历

项目内其中一个管理后台需要发布文章,需要一个富文本编辑器,经过一番选择后,最终选择了百度的Ueditor. 由于上传的文件是上传到另一台专门存放图片等静态资源的服务器上面的,所以就涉及到了跨域上传. 我实现跨域上传的主要方式是将编辑器的前后端分离,前段直接放到需要用的项目内,接收上传的后端(已做权限验证)放到图片服务器上面. 跨域要添加两个HTTP头: Access-Control-Allow-Origin: *//允许任意域名发起的跨域请求Access-Control-Allow-Header

Uploadify跨域上传原理

引用:http://www.cnblogs.com/me-sa/archive/2010/05/21/How-Uploadify-Cross-Domain.html < 回头再说:jQuery跨域原理 >一文提到浏览器的同源策略以及使用JsonP的方式实现跨域;在评论中金色海洋提出了一个问题: 我最近在用 uploadify + ashx 来做文件上传的功能.都测试成功了,但是发现我可以提交到其他的网站里面. 我是在本地测试了.两个网站,IP地址相同,使用端口来区分. 一个端口是8001,另一