Rumah  >  Artikel  >  hujung hadapan web  >  FormData对象上传文件

FormData对象上传文件

PHPz
PHPzasal
2017-04-04 13:56:071509semak imbas

<a href="http://www.php.cn/wiki/125.html" target="_blank">For</a>mData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用<a href="http://www.php.cn/wiki/1527.html" target="_blank">XML</a>HttpRequest发送这个"表单"。

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

上传文件部分只有底层的XMLHttpRequest对象发送上传请求,那么怎么通过<a href="http://www.php.cn/wiki/1495.html" target="_blank">jQuery</a>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代码

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

这里没有<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">里添加multiplemultiple="multiple"属性。

服务器端读文件

<a href="http://www.php.cn/wiki/1516.html" target="_blank">Servlet</a> 3.0 开始,可以通过 request.getPart()request.getPars() 两个接口获取上传的文件。
这里不多说,详细请参考官网教程 Uploading Files with Java Servlet Technology 以及示例 The fileupload Example Application

Atas ialah kandungan terperinci FormData对象上传文件. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn