将zip文件发送到前端进行DRF下载的步骤如下:
FileResponse
和HttpResponse
。FileResponse
来实现这一功能。同时,还可以设置响应的Content-Type和Content-Disposition,以便前端能够正确地处理该文件。
from django.http import FileResponse, HttpResponse
def download_zip(request):
# 生成并保存zip文件
# ...
# 读取zip文件并返回给前端
with open('path/to/zipfile.zip', 'rb') as f:
response = FileResponse(f)
response['Content-Type'] = 'application/zip'
response['Content-Disposition'] = 'attachment; filename="download.zip"'
return response
function downloadZip() {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/download-zip/', true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (xhr.status === 200) {
var blob = new Blob([xhr.response], { type: 'application/zip' });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'download.zip';
link.click();
}
};
xhr.send();
}
或者使用fetch API:
function downloadZip() {
fetch('/api/download-zip/')
.then(response => response.blob())
.then(blob => {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'download.zip';
link.click();
});
}
downloadZip
函数来触发下载操作。可以在按钮的点击事件中调用该函数。
<button onclick="downloadZip()">Download Zip</button>
这样,当用户点击下载按钮时,前端会发送GET请求到后端,后端会生成并保存zip文件,并将其作为响应返回给前端。前端接收到响应后,会将zip文件保存到本地,并以指定的文件名进行下载。
领取专属 10元无门槛券
手把手带您无忧上云