md5值可以作为文件的唯一标识符,从而实现秒传文件,只需知道该文件的md5值是否存在,存在的话可以在数据库中作为记录进行索引存储下来
import hashlib
import os
from functools import partial
from django.views import View
from django.conf import settings
BASE_DIR = settings.BASE_DIR
class FileUpload(View):
def post(self, request):
# 从前端获取文件
file_ = request.FILES.get('file_')
# 计算md5
MD5 = md5(file_)
# 把文件放入项目的media文件夹中
folder_path = os.path.join(BASE_DIR, 'media')
file_path = os.path.join(folder_path, MD5)
with open(file_path, 'wb') as f:
f.write(file_)
def md5(data, block_size=65536):
# 创建md5对象
m = hashlib.md5()
# 对django中的文件对象进行迭代
for item in iter(partial(data.read, block_size), b''):
# 把迭代后的bytes加入到md5对象中
m.update(item)
str_md5 = m.hexdigest()
return str_md5