您的位置:首页 > Web前端 > JQuery

通过jQuery Ajax使用FormData对象上传文件

2017-09-06 20:48 791 查看
FormData
对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用
XMLHttpRequest
发送这个"表单"。

Mozilla Developer 网站 使用FormData对象 有详尽的
FormData
对象使用说明。

但上传文件部分只有底层的
XMLHttpRequest
对象发送上传请求,那么怎么通过
jQuery
Ajax
上传呢?

本文将介绍通过
jQuery
使用
FormData
对象上传文件。

使用form表单初始化FormData对象方式上传文件

HTML代码

<form id="uploadForm" enctype="multipart/form-data">
<input id="file" type="file" name="file"/>
<button id="upload" type="button">upload</button>
</form>

Javascript 代码

$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: new FormData($('#uploadForm')[0]),
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里要注意几点:

processData
设置为
false
。因为
data
值是
FormData
对象,不需要对数据做处理。

<form>
标签添加
enctype="multipart/form-data"
属性。

cache
设置为
false
,上传文件不需要缓存。

contentType
设置为
false
。因为是由
<form>
表单构造的
FormData
对象,且已经声明了属性
enctype="multipart/form-data"
,所以这里设置为false。

上传后,服务器端代码需要使用从查询参数名为
file
获取文件输入流对象,因为
<input>
中声明的是
name="file"


如果不是用
<form>
表单构造
FormData
对象又该怎么做呢?

使用FormData对象添加字段方式上传文件

HTML代码

<div id="uploadForm">
<input id="file" type="file"/>
<button id="upload" type="button">upload</button>
</div>

这里没有
<form>
标签,也没有
enctype="multipart/form-data"
属性。

javascript代码

var formData = new FormData();
formData.append('file', $('#file')[0].files[0]);
$.ajax({
url: '/upload',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function(res) {
}).fail(function(res) {});

这里有几处不一样:

append()
的第二个参数应是文件对象,即
$('#file')[0].files[0]


contentType
也要设置为‘false’。

从代码
$('#file')[0].files[0]
中可以看到一个
<input type="file">
标签能够上传多个文件,

只需要在
<input type="file">
里添加
multiple
multiple="multiple"
属性。

后台获取上传的文件

HttpPostedFileBase file = Request.Files[0];
if (file != null && file.ContentLength>0)
{
var fileName = Path.GetFileName(file.FileName)??DateTime.Now.Ticks+".csv";
string mapPath = Server.MapPath("~/App_Data/openIdUploads");
if (!Directory.Exists(mapPath))
{
Directory.CreateDirectory(mapPath);
}
var path = Path.Combine(mapPath, fileName);
file.SaveAs(path);
}


参考原文链接http://www.jianshu.com/p/46e6e03a0d53

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: