jquery ajax上传文件

一、jQuery ajax

1、 dataType(xml、html、script、json、jsonp、text):预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断。
什么是MIME类型?把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。默认值为contentType = "application/x-www-form-urlencoded"

2、formData.append("xxx","xxxx");异步发送这个数据的时候必须设置processData:false。contentType:"application/json"必须是json数据, 注意name:"xxx"不是json串, 所以不可以设置contentType, 默认即可。form域中如果没有 type=file的控件,用默认的 application/x-www-form-urlencoded 就可以了。但是如果有 type=file 的话,就要用到 multipart/form-data 了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file)、Content-Type(默认为text/plain)、name(控件name)等信息,并加上分割符(boundary)。

3、表单提交内容的编码类型由属性enctype决定。它可以有以下三个值
1)application/x-www-form-urlencoded:窗体数据被编码为名称/值对。它是post的默认格式,使用js中URLencode转码方法。包括将name、value中的空格替换为加号、将非ascii字符做百分号编码、将input的name、value用'='连接,不同的input之间用'&'连接。当post请求时,浏览器把form数据封装到http body中。
2)multipart/form-data:窗体数据被编码为一条消息,form域中的每个控件对应消息中的一个部分。(multipart/form-data将表单中的每个input转为了一个由boundary分割的小格式,不转码,直接将utf8字节拼接到请求体中。在本地有多少字节实际就发送多少字节,极大提高了效率,适合传输长字节。)
3)text/plain : 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
    <style>
        .progress {
            width: 600px;
            height: 10px;
            border: 1px solid #ccc;
            border-radius: 10px;
            margin: 10px 0px;
            overflow: hidden;
        }

        /* 初始状态设置进度条宽度为0px */
        .progress>div {
            width: 0px;
            height: 100%;
            background-color: yellowgreen;
            transition: all .3s ease;
        }
    </style>
</head>

<body>
    <input type="file" id="upload-file">
    <div class="progress">
        <div></div>
    </div>
    <button onclick="">上传</button>
</body>

<script>
    function uploadFile() {
        // 获取上传的文件
        var uploadFile = $('#upload-file').get(0).file[0];
        // 实例化一个表单数据对象
        var formdata = new FormData();
        formdata.append('fileInfo', uploadFile);
        $.ajax({
            url: '/uploadfileurl',
            type: 'post',
            // 这里要设置异步上传,才能成功调用xhr.upload.addEventListener('progress',function(e){}), progress回掉函数
            async: true,
            data: formdata,
            // 接收数据类型
            dataType: 'json',
            // 对数据进行序列化
            // 把 { width:1680, height:1050 } 参数对象序列化为 width=1680&height=1050 这样的字符串。
            processData: false,
            // 发送数据编码类型
            // 在 form标签(有enctype属性)中设置了enctype(enctype就是encodetype就是编码类型的意思) = "multipart/form-data"
            //(指表单数据有多部分构成,既有文本数据,又有文件等二进制数据),
            //这样请求中的 contentType 就会默认为 multipart/form-data 。
            //这里设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件。
            contentType: false,
            xhr: function () {
                var xhr = new XMLHttpRequest();
                // 使用XMLHttpRequest.upload监听上传过程,注册progress事件,打印回调函数中的event事件
                xhr.upload.addEventListener('progress', function (e) {
                    console.log(e);
                    // loaded代表上传了多少
                    // total代表总数为多少
                    var progressRate = (e.loaded / e.total) * 100 + '%';
                    // 通过设置进度条的宽度达到效果
                    $('.progress > div').css('width', progressRate);
                })
                return xhr;
            },
            success: function (data) {
                
            },
            error: function (e) {
                console.log(e);
            }
        })
    }
</script>

</html>

二、springMVC @RequestMapping

1、RequestMapping注解有六个属性。

1)value, method
value:指定请求的实际地址,指定的地址可以是URI Template 模式。(a、可以指定为普通的具体值;b、可以指定为含有某变量的一类值;c、可以指定为含正则表达式的一类值。)

method: 指定请求的method类型, GET、POST、PUT、DELETE等。

2)consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json、text/html。
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

3)params,headers
params: 指定request中必须包含某些参数值时,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值