(H5)FormData+AJAX+SpringMVC跨域异步上传文件

最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩。

总结下今天弄了一个早上的跨域异步上传文件。主要用到技术有HTML5的FormData,AJAX,Spring MVC。

首先看下上传页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <script type="text/javascript" src="js/plugins/jquery-1.8.3.min.js" ></script>
        <title></title>
    </head>
    <body>
        <input type="file" id="file_upload"/>
        <input type="button" value="上传图片" id="upload"/>
    </body>
    <script type="text/javascript" src="js/upload.js" ></script>
</html>

上传页面很简单,就两个input元素。

然后看下upload.js。注意这个upload.js是自己写的,里面那个ajaxFileUpload并不是jQuery提供的那个上传插件的方法。

$(document).ready(function(){

    function ajaxFileUpload(){
        var formData = new FormData();
        formData.append(‘file‘,$("#file_upload")[0].files[0]);    //将文件转成二进制形式
        $.ajax({
            type:"post",
            url:"http://localhost:8080/nitshareserver/serve/fileupload",
            async:false,
            contentType: false,    //这个一定要写
            processData: false, //这个也一定要写,不然会报错
            data:formData,
            dataType:‘text‘,    //返回类型,有json,text,HTML。这里并没有jsonp格式,所以别妄想能用jsonp做跨域了。
            success:function(data){
                alert(data);
            },
            error:function(XMLHttpRequest, textStatus, errorThrown, data){
                alert(errorThrown);
            }
        });
    }

    $("#upload").click(function(){
        ajaxFileUpload();
    });
});

前端这样就可以了,接下来看看服务端的写法。

服务端接口写法:

//    @ResponseBody
    @RequestMapping(value="fileupload", method=RequestMethod.POST,produces="text/html;charset=utf-8")
    public void addPic(HttpServletResponse response,HttpServletRequest request,
            @RequestParam(value="file", required=false) MultipartFile file) throws IOException{
        System.out.println(file.getOriginalFilename());
        response.getWriter().write("success");
        response.setHeader("Access-Control-Allow-Origin", "*");
//        return "success";
    }

这里response.setHeader("Access-Control-Allow-Origin", "*");这句很重要,没有这句,前端接收不到返回的数据。Access-Control-Allow-Origin是HTML5中定义的一种服务器端返回Response header,用来解决资源(比如字体)的跨域权限问题。它定义了该资源允许被哪个域引用,或者被所有域引用(google字体使用*表示字体资源允许被所有域引用),但是在真正的产品中,是不会用*的。这里只是好方便演示。

那跑一下工程,看看前端会不会收到success吧。

结果:

服务端控制台:

转载注明出处:http://www.cnblogs.com/BigDreamer/

时间: 2024-12-26 19:31:52

(H5)FormData+AJAX+SpringMVC跨域异步上传文件的相关文章

Jquery~跨域异步上传文件

先说明白 这个跨域异步上传功能我们借助了Jquery.form插件,它在异步表单方面很有成效,而跨域我们会在HTTP响应头上添加access-control-allow-method,当然这个头标记只有IE10,火狐和谷歌上支持,对于IE10以下的浏览器来说,我们就不能用这种方式了,我们需要换个思路去干这事,让服务端去重写向我们的客户端,由客户端(与文件上传页面在同域下)来返回相关数据即可. 再做事 1 Jquery.form的使用 <form method="post" act

cors跨域 + 异步上传文件

一:实现跨域 CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问.CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求.实现此功能非常简单,只需由服务器发送一个响应标头即可. 如果不需要文件上传,可以使用jquery.ajax,设置dataType="jsonp",即可(注意:jsonp的请求格式与返回数据与json有些许差入). 1.使用jQuery的support属性,其下有一个cors设置,设置成true,说名此次请求需要验证该请求是否允许跨域 即:$.su

form上传文件以及跨域异步上传

要设置了enctype属性才能上传,需要使用上传的jar包,这里使用的是cos-26Dec2008.jar, 而且后台获取值的时候,getfile要放在第一位 一次设置好上传格式后没有上传文件,也就没有getFile,结果总是取不到值,删掉enctype="multipart/form-data"属性就ok了. 关于跨域上传文件: 跨域上传文件总会报错,即使服务器端设置了header('Access-Control-Allow-Origin: *'),仍会报错说缺少multipart属

异步上传文件并获得返回值(完全跨域)

http://blog.csdn.net/lrz1011/article/details/7913992 异步上传文件并获得返回值(完全跨域)AJAX可以进行数据的异步请求,但对于文件和跨域问题却束手无策. Jsonp可以进行跨域数据的异步请求,但同样不能使用于文件. <form>表单可以进行跨域数据和文件的上传,但却会使页面跳转. 那么如何同时实现“异步”+“跨域”+“文件”+“返回值”这几个特性呢?方法如下: 原理: 将<form>表单通过一个iframe来submit,也就是

springmvc异步上传文件

前提条件 注意:bean的id名不能改变 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSi

HTML5 jQuery+FormData 异步上传文件,带进度条

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="../resources/css/common.css" rel="stylesheet" /> <script src="../resources/js/jquery-2.1.4.js"></script> <

解决ajax异步上传文件的问题

HTML: <form id="avater" name="formlist"> {{ csrf_field() }} <ul class="list-group container" style="width:50%"> <li class="list-group-item list" style="border-radius: 5px"> <

spingMVC异步上传文件

框架是个强大的东西,一般你能想到的,框架都会帮你做了,然后只需要会用就行了,spingmvc中有处理异步请求的机制,而且跟一般处理请求的方法差别不大,只是多了一个注解:spingmvc也可以将string.list.map转化成json数据:然后前台发起一个ajax请求,后台处理完成返回json数据,这就是异步上传文件的基本思路. 1.springMVC处理异步请求配置 首先是需要的jar包资源 上传文件的jar: commons-fileupload-1.2.2.jar commons-io-

简述三种异步上传文件方式

 很久没写过博客了! 上次写已经是去年的12月了,离现在也有足足三个月了.这几个月因为要搭建个人网站以及准备个人简历,包括最近要准备最近的各大公司的实习春招,很难抽时间来写博客,这次的异步文件上传我觉得是很有必要了解的,笼络了很多知识点,因此准备写一篇博客来巩固下. 异步上传文件是为了更好的用户体验,是每个前端必须掌握的技能.这里我提出三点有关异步文件上传的方式. 使用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpReques