`
sharong
  • 浏览: 492390 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
D1667ae2-8cfc-3b68-ac7c-5e282789fa4a
论开源
浏览量:8695
7eb53364-fe48-371c-9623-887640be0185
Spring-data-j...
浏览量:13025
社区版块
存档分类
最新评论

使用ajax异步回调实现服务端图片上传验证

 
阅读更多
最近开发一个项目,提交表单时,具有上传图片文件的功能。上传图片可以使用当前流行的Apache Fileupload或者struts自带的文件上传功能。但是,当限制为仅能上传最大1M的图片,并且只能是jpg,gif图的时候,如何进行验证呢?前端的js显然是没有权限访问本地文件来进行验证的。经过多方研究,想到了ajax的回调函数ajax_callback。
下面是前端jsp文件的部分代码
<head>
<script type="text/javascript">
	function ajax_callback(result) {
		if(/^1:/.test(result)){
			alert(result.substr(3));
		}else{
			window.location.href=result;
		}

		return;
	} 

	function submitform(){
		var form=document.getElementById('fm');
	        form.target="check_frame";
		form.submit();
	}
</script>
</head>
<body>
<form action="uploadImg" enctype="multipart/form-data" method="post" id="fm" onsubmit="return false">
... ...
<input class="fileBtn" name="realFile1" id="realFile1" type="file"/>
... ...
<a href="javascript:void(0)" class="button" onclick="return submitform()">提交</a>
... ...
<iframe name="check_frame" style="display:none;"></iframe>
</form>
</body>

注意,在form表单的最底部,放置了一个iframe,作用是当提交表单form时执行的action的返回值可以target到隐藏的iframe

而在代码中的uploadImg服务端代码,此时需要具有返回值,我的做法是只要验证出错的代码,全都用1:开头,比如return "1:图片超过1M";等,那如果服务端方法的返回值是void怎么办呢?我使用了以下代码
	public String appendJS(String res) {
		String prefix = "<script type=\"text/javascript\" language=\"javascript\">document.domain=\"yourdomain.com\";parent.ajax_callback('";
		String suffix = "')</script>";
			
		return res == null ? prefix + suffix : prefix + res + suffix;
	}

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	boolean verify = false;
	... ...
	... ...

	//当文件上传上来之后,先进行文件后缀名,文件大小的服务端验证
	//如果不符合,就使用下面的代码返回到前端
	if(!verify){
	HttpServletResponse response = inv.getResponse();
	response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String jsRes = appendJS(res);
        if(logger.isDebugEnabled())
        	logger.debug("jsRes -> " + jsRes);
        
        out.println(jsRes);
	
	return;
	}
}

经过QA详细测试,这种服务端验证的方式适合当前流行的大部分浏览器,例如FireFox,Chrome,IE等。
分享到:
评论

相关推荐

    ajax异步上传图片例子

    在现代Web应用中,异步数据传输已经成为一种标准实践,...以上就是Ajax异步上传图片的基本流程和关键知识点,实践中可能需要根据具体需求进行调整和优化。通过Ajax,我们可以构建出响应快速、用户体验优秀的Web应用。

    jQuery-ajax示例含客户端和服务端源码(可运行

    这个示例包含客户端和服务器端的源码,旨在展示如何使用jQuery实现AJAX功能。 **1. jQuery AJAX 基本用法** 在jQuery中,`$.ajax()`函数是进行异步请求的核心方法。它的基本语法如下: ```javascript $.ajax({ ...

    Ajax表单验证框架

    5. 在Ajax回调函数中处理响应,根据验证结果展示错误信息或提交数据。 五、注意事项 - 避免暴露敏感信息:在验证失败时,不应返回过多的错误详情,防止注入攻击。 - 提供良好的用户体验:即使验证失败,也要确保...

    asp.net ajax 无刷新验证注册名

    3. **AJAX回调**:服务器返回响应后,客户端脚本会接收到这个响应,然后根据结果更新UI,如显示错误消息或成功提示。 4. **错误处理**:为了增强用户体验,应当包含适当的错误处理机制,例如处理网络故障、服务器...

    DWR 实现ajax上传的小实例

    DWR (Direct Web Remoting) 是一个开源Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行异步通信,实现了类似Ajax的功能。在这个小实例中,我们将探讨如何使用DWR来实现实时的文件上传功能,这...

    Ajax异步检查用户名是否存在

    上述示例代码中展示的是使用XMLHttpRequest对象创建Ajax请求,并设置了合适的回调函数来处理服务器返回的结果。 具体的实现步骤包括: 1. 创建XMLHttpRequest对象。 2. 使用open方法配置请求,包括指定请求类型...

    AjaxPage Asp.Net实现简单无刷新页面

    这需要实现 IPostBackDataHandler 接口,以便在数据改变时处理客户端的回调。 6. **JavaScript 和 jQuery**:在客户端,JavaScript 通常用来处理事件和更新页面。jQuery 可以简化 DOM 操作,使得动态更新更加容易。...

    ajax经典面试题;一个页面实现增删改查之纯JS版

    题目描述中的"一个页面实现Ajax效果的增删改查-基本版"可能是指一个简单的Web页面,该页面通过JavaScript处理用户的交互,并使用Ajax调用ASP.NET服务端的方法来进行数据库操作。 1. **创建Ajax请求**: 使用...

    fileup.rar_ajax上传图片_上传文件

    在这个事件的回调函数中,我们可以获取到选中的文件对象,并准备进行AJAX上传。 ```javascript document.getElementById('uploadInput').addEventListener('change', function(e) { var file = e.target.files[0]...

    jQuery ajax 无刷新 验证码 asp.net

    成功回调函数中,接收返回的验证码并更新图片元素的`src`属性,实现图片的无刷新更换。 4. **验证用户输入**:用户输入验证码后,再次使用$.ajax发送POST请求,将输入的验证码值和可能的会话或Cookie中的验证码进行...

    ajax经典面试题;一个页面实现增删改查之jquery版

    服务端处理后,通过回调函数更新页面上的数据显示结果。 5. **DB.sql文件**:这可能是数据库脚本文件,用于创建或初始化数据库结构。在项目开始时,可以通过运行这个脚本来设置测试数据。 6. **一个页面实现Ajax...

    Asp.net Ajax框架教程

    9. 错误回调处理:学习如何处理客户端的错误回调,确保程序在出现错误时有适当的反馈机制。 10. 客户端编程特性:深入探讨ASP.NET AJAX客户端库的特性,包括对象交互、JSON序列化和反序列化、客户端事件处理等。 ...

    Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值_.docx

    这样,当Ajax请求返回时,JavaScript的`success`回调就能接收到这些数据,并将其插入到下拉菜单中。 安全方面,这个实现需要注意以下几点: 1. 数据过滤与验证:确保来自客户端的请求参数安全可靠,防止SQL注入等...

    ASP.NET Ajax程序设计(PDF)

    2. 使用C#编写服务端代码,处理异步回调并更新客户端状态。 3. 实现无刷新验证,提高用户交互体验。 4. 使用AjaxControlToolkit扩展ASP.NET AJAX的功能,如Accordion、TabContainer等。 5. 利用AJAX进行JSON...

    Ajax技术的例子用C#实现

    - 编写回调函数:当请求完成时,处理服务器返回的数据,更新DOM元素。 - 错误处理:设置事件监听器来处理网络错误或其他异常情况。 5. **示例代码** - C#服务端: ```csharp [WebMethod] public static ...

    asp.net ajax完全手册10-12章

    此外,还将讨论关于优化和调试AJAX应用程序的方法,包括异步回调的性能优化、错误处理策略和使用Profiler进行性能分析。最后,我们将接触一些高级主题,如使用jQuery与其他JavaScript库与ASP.NET AJAX集成,以及利用...

    ajax访问wcf服务

    - **错误回调**:在Ajax调用中,可以设置error回调来处理服务器返回的错误信息。 - **WCF的Tracing和消息日志**:可以帮助调试服务端问题,确保数据正确发送和接收。 7. **跨域访问(CORS)** - 当Ajax请求的源与...

    testAjax测试ajax

    3. **异步处理**:通过回调函数或Promise处理异步响应,确保页面在等待服务器响应时不会冻结。 4. **跨域请求**:如果请求的URL与当前页面不在同一源,需要考虑CORS(跨源资源共享)策略,设置合适的响应头来允许...

    ajax跨域请求WebService.asmx

    JSONP是一种利用`&lt;script&gt;`标签不受同源策略限制的特性,通过动态创建`&lt;script&gt;`标签,将服务端提供的回调函数名与JSON数据一起返回,由客户端执行。 7. **安全考虑**:跨域请求虽然方便了开发,但也增加了安全风险...

    ajax安装程序+jar包

    - JavaScript是实现Ajax的关键,通过创建XMLHttpRequest对象实例,编写回调函数来处理服务器响应,以及构建请求参数,实现与服务器的交互。 - 使用`open()`方法设置请求类型(GET或POST)、URL和是否异步,接着...

Global site tag (gtag.js) - Google Analytics