Django - 创建多个文件的 Zip 并使其可下载[重复]

pythonDjango

1个回答

写回答

蔡米奇

2025-07-09 20:32

+ 关注

Django
Django

使用Django框架可以轻松地创建多个文件的Zip,并使其可以下载。在本文中,我们将介绍如何使用Django来实现这一功能,并提供相应的案例代码。

首先,我们需要在Django项目中创建一个视图函数来处理文件的打包和下载。我们可以将这个函数放在一个名为"views.py"的文件中。以下是一个简单的示例代码:

Python

import os

import zipfile

from Django.http import HttpResponse

def download_files(request):

# 需要打包的文件路径列表

file_paths = ['/path/to/file1.txt', '/path/to/file2.txt', '/path/to/file3.txt']

# 创建一个临时文件夹来存放打包后的文件

temp_folder = '/path/to/temp_folder'

os.makedirs(temp_folder, exist_ok=True)

# 打包文件

zip_file_path = os.path.join(temp_folder, 'files.zip')

with zipfile.ZipFile(zip_file_path, 'w') as zip_file:

for file_path in file_paths:

zip_file.write(file_path, os.path.basename(file_path))

# 读取打包后的文件并返回给用户下载

with open(zip_file_path, 'rb') as file:

response = HttpResponse(file.read(), content_type='application/zip')

response['Content-Disposition'] = 'attachment; filename=files.zip'

# 删除临时文件夹及其内容

shutil.rmtree(temp_folder)

return response

在上述代码中,我们首先定义了一个包含待打包文件路径的列表。然后,我们创建了一个临时文件夹来存放打包后的文件。接下来,使用zipfile.ZipFile类创建一个Zip文件,并将待打包的文件逐个添加到Zip文件中。最后,我们将打包后的文件读取为二进制数据,并通过HttpResponse返回给用户进行下载。在返回响应前,我们还设置了响应的Content-Disposition头,用于指定下载的文件名。

为了使用这个视图函数,我们还需要在Django的URL配置文件中添加相应的URL映射。假设我们将这个函数映射到/download_files/路径上,以下是一个简单的URL配置示例:

Python

from Django.urls import path

from .views import download_files

urlpatterns = [

path('download_files/', download_files, name='download_files'),

]

现在我们已经完成了创建多个文件的Zip并使其可下载的Django功能。用户可以通过访问/download_files/路径来下载包含指定文件的Zip压缩包。

案例代码:

Python

import os

import zipfile

from Django.http import HttpResponse

def download_files(request):

file_paths = ['/path/to/file1.txt', '/path/to/file2.txt', '/path/to/file3.txt']

temp_folder = '/path/to/temp_folder'

os.makedirs(temp_folder, exist_ok=True)

zip_file_path = os.path.join(temp_folder, 'files.zip')

with zipfile.ZipFile(zip_file_path, 'w') as zip_file:

for file_path in file_paths:

zip_file.write(file_path, os.path.basename(file_path))

with open(zip_file_path, 'rb') as file:

response = HttpResponse(file.read(), content_type='application/zip')

response['Content-Disposition'] = 'attachment; filename=files.zip'

shutil.rmtree(temp_folder)

return response

Django项目的URL配置文件中添加以下代码:

Python

from Django.urls import path

from .views import download_files

urlpatterns = [

path('download_files/', download_files, name='download_files'),

]

通过以上代码,我们成功创建了一个可以打包多个文件为Zip并使其可下载的Django功能。用户只需访问/download_files/路径即可获取包含指定文件的Zip压缩包。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号