【发布时间】:2019-10-08 14:27:28
【问题描述】:
我正在使用 Django 构建一个网站,用户可以在其中上传 .zip 文件。我不知道该文件有多少个子文件夹,也不知道它包含哪些类型的文件。
我想:
1) 解压文件
2) 获取解压目录下的所有文件(可能包含嵌套子文件夹)
3) 将这些文件(内容,而不是路径)保存到数据库中。
我设法解压文件并输出文件路径。
然而这并不是我想要的。因为我不关心文件路径,而是文件本身。
另外,由于我将解压后的文件保存到我的media/documents,如果不同的用户上传不同的zip,并且所有的zip文件都被解压,那么media/documents的文件夹会很大,无法知道是谁上传的。
解压缩 .zip 文件
myFile = request.FILES.get('my_uploads')
with ZipFile(myFile, 'r') as zipObj:
zipObj.extractall('media/documents/')
获取子文件夹中的文件路径
x = [i[2] for i in os.walk('media/documents/')]
file_names = []
for t in x:
for f in t:
file_names.append(f)
views.py # 它并不完美,它只是一个想法。我只是在调试。
def homeupload(request):
if request.method == "POST":
my_entity = Uploading()
# my_entity.my_uploads = request.FILES["my_uploads"]
myFile = request.FILES.get('my_uploads')
with ZipFile(myFile, 'r') as zipObj:
zipObj.extractall('media/documents/')
x = [i[2] for i in os.walk('media/documents/')]
file_names = []
for t in x:
for f in t:
file_names.append(f)
my_entity.save()
【问题讨论】:
-
不清楚,要保存到数据库中的是什么?只有文件名或内容?你的数据库方案是什么?是否要参考用户保存每个文件?
-
你真的需要打电话给
ZipFile.extractall吗?该类提供了访问文件的方法,而无需将整个内容提取到文件系统中。看看ZipFile.infolist和ZipFile.read。 -
我需要在数据库中保存每个文件的内容,而不是路径名。最好参考主 zip 文件。