下面我将为你详细讲解“Django实现文件上传下载功能”的完整攻略,包含以下两部分内容:
- 文件上传功能实现步骤
首先,在Django项目中创建一个文件上传的视图,可以在views.py中创建:
from django.shortcuts import render
from django.http import HttpResponse
def upload_file(request):
if request.method == 'POST':
file = request.FILES['file']
# 对上传的文件进行存储等操作
response = HttpResponse('文件上传成功!')
return response
return render(request, 'upload.html')
其中,首先根据请求方式判断是否是POST请求,如果是POST请求,则通过request.FILES获取上传的文件(假定为名为file
的上传字段),接下来就可以对上传的文件进行自定义操作了。
在视图中处理完成文件上传后,需要为用户提供一个上传文件的表单,在模板中创建一个upload.html文件:
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="/upload_file/" enctype="multipart/form-data" method="post">
{% csrf_token %}
<label for="file">选择文件:</label>
<input type="file" name="file" id="file">
<input type="submit" value="上传">
</form>
</body>
</html>
在表单中通过enctype="multipart/form-data"
来指定请求的编码类型为文件上传类型,使用input
标签中的type=file
属性来实现文件选择的功能,最后通过submit
按钮实现提交操作。
在urls.py中建立对应的url路由,在其中添加新建的视图:
from django.contrib import admin
from django.urls import path
from .views import index, upload_file
urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
path('upload_file/', upload_file),
]
此时,用户访问/upload_file/
路由可以看到文件上传的表单。
- 文件下载功能实现步骤
文件下载功能需要在用户访问视图时提供对应文件的下载链接,代码如下:
import os
from django.http import FileResponse
def download_file(request):
file_name = 'test.txt'
file_path = os.path.join(BASE_DIR, file_name)
with open(file_path, 'rb') as fp:
response = HttpResponse(fp.read())
response['content_type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)
return response
首先,定义了下载文件的视图函数,并指定下载的文件名称(此处假定文件名为test.txt)。在获取文件的完整路径后,使用Python内置的文件操作函数open()
以二进制读取模式打开文件,再将读取到的内容放到HttpResponse
中,最后设置响应头的content_type
和Content-Disposition
属性,实现以附件形式下载文件。
与上传功能一样,需要在urls.py中建立对应的url路由,建议将下载文件的路由地址和文件名作为参数传递进来:
from django.urls import path
from .views import download_file
urlpatterns = [
path('download_file/<str:file_name>/', download_file),
]
此时,用户访问/download_file/test.txt/
路由即可实现文件下载。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现文件上传下载功能 - Python技术站