Представление Django для загрузки файла с сервера
У меня есть views.py, который:
- создает несколько файлов .xlsx
- выбирает нужный .zip и помещает файл внутрь
После этого я хочу, чтобы этот .zip автоматически загружался. Я провел некоторые исследования и протестировал несколько кодов, но ни один не сработал.
Я создал папку "temp" в корне приложения, где хранятся созданные файлы.
упрощенный view.py
def generate_ws(request,cource,ca_id):
ca = get_object_or_404(CreditAnalysis,pk=ca_id)
ca_owners = CAOwner.objects.filter(ca_operation=ca)
mo_farms = MOFarm.objects.filter(ca_operation=ca)
misses = []
generate_owner_mo(ca_owner,misses,city)
zip_name = 'temp/MOs - ' + str(ca_owner.owner) + '.zip'
zf = zipfile.ZipFile(zip_name,'w')
zf.close()
generate_farm_mo(mo_farm,misses,city)
generate_production_mo(ca,misses,city,production_city,pks)
files = glob.glob('temp/*.xlsx')
for file in files:
file_key = file.split('.')[0]
file_key=file_key.split(' - ')
for ca_owner in ca_owners:
zip_name = 'temp/MOs - ' + str(ca_owner.owner) + '.zip'
if str(ca_owner.owner) in file_key:
zf = zipfile.ZipFile(zip_name,'a')
new_file_name = file[5:]
zf.write(file,new_file_name)
zf.close()
break
files = glob.glob('temp/*.zip')
for file in files:
download_mo(request,file)
misses = list(set(misses))
return render(request,'generate_mo.html',{'misses':misses,})
download_mo
def download_mo(request,file):
path_to_file = os.path.realpath(file)
with open(path_to_file,'rb') as fh:
response = HttpResponse(fh.read())
file_name = file[5:]
response['Content-Disposition'] = 'inline; filename=' + file_name
return response
Все работает правильно, кроме загрузки, которая никогда не начинается
Просто верните FileResponse
вместо HttpResponse
:
from django.http import FileResponse
def download_mo(request,file):
path_to_file = os.path.realpath(file)
response = FileResponse(open(path_to_file, 'rb'))
file_name = file[5:]
response['Content-Disposition'] = 'inline; filename=' + file_name
return response