form+iframe解决跨域上传文件的方法


Posted in Javascript onNovember 18, 2016

(1)  jsp代码:

<form id="form" name="form" enctype="multipart/form-data" method="post" target="hidden_frame"> 
	<table style="border:0;width:100%;text-align:middle;">
		<tr style="border:0;height:20px;width:100%;">
			<td style="border:0;width:75px;height:20px;line-height:20px;">控件标识</td>
			<td>
				<input id="viewkey" name="viewkey" style="width:200px;" type="text" maxlength="300" placeholder="控件标识不能超过30个字。" class="easyui-validatebox" onkeyup="check()" required="true" missingMessage="参数名称不可为空."/>
			</td>
		</tr>
		<tr>
			<td>更新类型</td>
			<td><input id="type" name="type" class="easyui-combobox" valueField="id" textField="text" panelHeight="auto"/></td>
		</tr>
		<tr>
			<td>备注</td>
			<td colspan=3>
						<textarea id="remark" name="remark" onkeyup="check()" placeholder="备注不能超过300个字。" style="width:200px;height:80px;" ></textarea>
			</td>
		</tr>
		<tr>
			<td>资源文件:</td>
			<td >
				<input type="file" id="file" name="file" style="height:25px; width:200px;" onchange="fileChange(this);">
				<input type="hidden" name="projectid" id="projectid" >
				<input type="hidden" name="downimageconfigid" id="downimageconfigid" >
				<input type="hidden" name="iskeychange" id="iskeychange" >
				<input type="hidden" name="isnopic" id="isnopic" >
				<iframe name="hidden_frame" id="hidden_frame" style="display:none"></iframe> 
			</td>
		</tr>
		<tr>
			<td></td>
			<td><div style="color: red; margin-top: 10px;">图片大小必须小于500K。</div></td>
		</tr>
	</table>
</form>

说明:form中的target指向iframe中的name。这点要注意。

(2)  js代码:

//添加对话框
function initDialog(){
	$('#imgconf-dialog').dialog({
		modal:true,
		closable:false,
		top: 20,
		buttons:[{
			id:'ut_add',
			text:'确定',
			iconCls:'icon-ok',
			handler:function(){
				//表单注册事件
				$('#form').form({
					success:function(data){//提交成功后的回调函数
						if(data === '00'){
							jqueryAlert('操作成功');
						}
						if(data === '03'){
							$.messager.alert(global.title,'主键为空!','warning');
							$('#ut_add').linkbutton('enable');
							return;
						}
						if(data === '02'){
							$.messager.alert(global.title,'已存在的控件标识!','warning');
							$('#ut_add').linkbutton('enable');
							return;
						}
						if(data === '01'){
							$.messager.alert(global.title,'操作失败','warning');
							$('#ut_add').linkbutton('enable');
							return;
						}
						$('#imgconf-dialog').dialog('close');
						//重新加载列表
						getDataGridData();;
				  }
				});

				$('#ut_add').linkbutton('disable');

				//【添加】
				if(global.operatype == 'add'){
					if($('#viewkey').val() == null || $('#viewkey').val() == ''){
						$.messager.alert(global.title,'您尚未输入控件标识!','warning');
						$('#ut_add').linkbutton('enable');
						return;
					}
					if($('#file').val() == ''){
						$.messager.alert(global.title,'您尚未上传图片!!','warning');
						$('#ut_add').linkbutton('enable');
						return;
					}

					//表单上传操作
					$('#projectid').val(global.projectid);
					$('#form').attr("action", global.web_path + "/grid/imgconf/addimgconf.do");
					$("#form").submit();
					$('#ut_add').linkbutton('disable');
				} else {//【编辑】
					//控件标识是否改变
					var iskeychange;
					if(selected.viewkey == $('#viewkey').val()){//控件标识没有改变
						iskeychange = 'no';
					}else{
						iskeychange = 'yes';
					}
					var isnopic;
					if($('#file').val() == ''){//是否有上传图片
						snopic = 'yes';
					}else{
						isnopic = 'no';
					}

					//表单上传操作
					$('#projectid').val(global.projectid);
					$('#downimageconfigid').val(selected.downimageconfigid);
					$('#iskeychange').val(iskeychange);
					$('#isnopic').val(isnopic);
					$('#form').attr("action",global.web_path + "/grid/imgconf/modimgconf.do");
					$("#form").submit(); ;
					$('#ut_add').linkbutton('disable');
				}
			}
			},{
				id:'ut_close',
				text:'退出',
				handler:function(){
					$('#ut_add').linkbutton('enable');
					$('#imgconf-dialog').dialog('close');
					$('#uploadify').uploadifyClearQueue();
				}
			}]
	});
}


//重置
function reset(){
	$('#ut_add').linkbutton('enable');
	var target = $('#file');
	if(global.operatype == 'mod'){
		$('#imgconf-dialog').dialog('setTitle','修改');
		$('#viewkey').val(selected.viewkey);
		$('#type').combobox('setValue', selected.type);
		$('#remark').val(selected.remark);
		$('#imgconf-dialog').dialog('open');
		//文件上传清空
		deleteFile('file');
	}else {
		$('#imgconf-dialog').dialog('setTitle','添加');
		$('#viewkey').val('');
		$('#remark').val('');

		//文件上传清空
		deleteFile('file');
	}
}


/**
 * 文本区域限制长度
 */
function check(){
	var content = $('#remark').val();
	len = content.length;
	var maxlen = 300;
	if(len > maxlen){
		alert("字数太长,已被截断为300字!");
		$('#remark').val(content.substr(0,maxlen));
	}
}


// input type='file'置位操作
function deleteFile(file){
 var ie = (navigator.appVersion.indexOf("MSIE")!=-1);//IE 
 var ff = (navigator.userAgent.indexOf("Firefox")!=-1);//Firefox 
 if(ie){
	refreshUploader($("input[name="+file+"]")[0]);
 }
 else{
	$("input[name="+file+"]").attr("value","");
 }
}
function refreshUploader(file){
  var file2= file.cloneNode(false);
  file2.onchange= file.onchange;
  file.parentNode.replaceChild(file2,file);
}


//检测文件大小和类型
function fileChange(target){ 
//检测上传文件的类型 
if(!(/(?:jpg|gif|png|jpeg)$/i.test(target.value))) {
    alert("只允许上传jpg|gif|png|jpeg格式的图片");
    if(window.ActiveXObject) {//for IE
    target.select();//select the file ,and clear selection
      document.selection.clear();
    } else if(window.opera) {//for opera
    target.type="text";target.type="file";
    } else target.value="";//for FF,Chrome,Safari
    return;
  } else {
  return; //alert("ok");//or you can do nothing here.
  }
  
//检测上传文件的大小    
  var isIE = /msie/i.test(navigator.userAgent) && !window.opera; 
  var fileSize = 0;      
  if (isIE && !target.files){    
    var filePath = target.value;    
    var fileSystem = new ActiveXObject("Scripting.FileSystemObject");     
    var file = fileSystem.GetFile (filePath);    
    fileSize = file.Size;   
  } else {   
    fileSize = target.files[0].size;    
  }   
  var size = fileSize / 1024;  
  if(size>(500)){ 
  alert("文件大小不能超过500KB"); 
  if(window.ActiveXObject) {//for IE
    target.select();//select the file ,and clear selection
      document.selection.clear();
    } else if(window.opera) {//for opera
    target.type="text";target.type="file";
    } else {
    target.value="";//for FF,Chrome,Safari
    }
  return;
  }else{
  return;
  }  
}

(3) 后台java代码:

/**
* 添加下载图片配置
* @throws IOException 
*/
@RequestMapping(value = "/grid/imgconf/addimgconf",method = {RequestMethod.POST, RequestMethod.GET},produces = {"text/html;charset=UTF-8"})
@ResponseBody
public String addImgConf(HttpServletRequest
 request, HttpServletResponse response, BindException errors) throws IOException{
String m = "00";
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); 
response.setHeader("Access-Control-Allow-Origin", "*");
String projectid = Function.dealNull(multipartRequest.getParameter("projectid"));
String viewKey = Function.dealNull(multipartRequest.getParameter("viewkey"));
String type = Function.dealNull(multipartRequest.getParameter("type"));
String remark = Function.dealNull(multipartRequest.getParameter("remark"));
try {
//唯一性判断
int size = imgConfService.getImgConfsCount(Constants.DEF_STRING_NULL, projectid, viewKey, Constants.STATUS_ON);
if(size > 0){
m = "02";
logger.info("已存在的控件标识!");
return "<textarea>" + m + "</textarea>";
}
//上传图片
  Map<String, String> picInfo = imgConfService.uploadImage(fileMap);
imgConfService.addImgConf(UUID.randomUUID().toString(), projectid, viewKey, type, remark, picInfo.get("URL"), Constants.STATUS_ON);
m = "00";
logger.info("添加下载图片配置成功!");
} catch (Exception e) {
m = "01";
logger.error("添加下载图片配置失败" ,e);
}

//加<textarea>以解决IE下submit后没有执行回调success函数,这个是jquery easyui form的bug
return "<textarea>" + m + "</textarea>";
}

说明:"<textarea>" + m + "</textarea>";和produces = {"text/html;charset=UTF-8"}解决IE下不能执行回调函数success的问题

以上这篇form+iframe解决跨域上传文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
javascript对象之内置对象Math使用方法
Apr 16 Javascript
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
js动态生成指定行数的表格
Jul 11 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
Dec 04 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
Jquery中map函数的用法
Jun 03 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
vue中appear的用法
Aug 17 Javascript
Vue如何实现响应式系统
Jul 11 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
Dec 12 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
Nov 18 #Javascript
微信小程序开发实战教程之手势解锁
Nov 18 #Javascript
JavaScript之WebSocket技术详解
Nov 18 #Javascript
仿iframe效果Aajx文件上传实例
Nov 18 #Javascript
JavaScript之cookie技术详解
Nov 18 #Javascript
js前端解决跨域问题的8种方案(最新最全)
Nov 18 #Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 #Javascript
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
使用js实现将后台传入的json数据放在前台显示
2018/08/06 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python3.6实现学生信息管理系统
2019/02/21 Python
Python3 assert断言实现原理解析
2020/03/02 Python
浅析Python中字符串的intern机制
2020/10/03 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
小学端午节活动方案
2014/03/13 职场文书
安全例会汇报材料
2014/08/23 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
先进班集体事迹材料
2014/12/25 职场文书
中秋节随笔
2015/08/15 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书