AJAX可以通过`FormData`对象来处理文件上传,也可以通过`XMLHttpRequest`对象来处理文件下载。
**1. 文件上传**
可以使用`FormData`对象来上传文件,将文件对象添加到`FormData`中,然后通过AJAX发送请求。例如:
```javascript
var fileInput = document.getElementById('file-input');
var file = fileInput.files[0];
var formData = new FormData();
formData.append('file', file);
$.ajax({
url: 'example.com/upload',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data) {
// 处理上传成功响应
},
error: function(xhr, textStatus, errorThrown) {
// 处理上传失败响应
}
});
```
这里将文件对象添加到`FormData`中,然后将`FormData`作为请求数据发送到服务器。需要注意的是,需要将`processData`和`contentType`选项设为false,以便让jQuery不对数据进行处理。
**2. 文件下载**
可以使用`XMLHttpRequest`对象来下载文件,将服务器返回的二进制数据保存到本地文件中。例如:
```javascript
var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.com/download', true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (this.status === 200) {
var blob = this.response;
var a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = 'filename';
a.click();
}
};
xhr.send();
```
这里使用`XMLHttpRequest`对象发送GET请求,将响应类型设为"blob",然后将服务器返回的二进制数据保存在`Blob`对象中。最后创建一个链接并设置下载属性,点击链接即可下载文件。