В моем проекте django для загрузки файла используется следующий код. Он работает хорошо, если на клиентской машине был установлен IDM, но не работает, если IDM не установлен. Я не мог найти причины для этой странности.Django download не работает с браузером, но отлично работает в машинах, где установлен Internet Download Manager (IDM)
views.py
def somefunction():
something something
return render(request,
'something/download/download.html',
{'pdf_file_location': pdf_file_location})
def download(request):
if not request.user.is_authenticated():
return render(request, 'login/login/login.html')
else:
filename = request.POST.get('pdf_file_location')
if request.method == 'POST':
while os.path.exists(filename) is False:
time.sleep(2)
chunk_size = 8192
response = StreamingHttpResponse(FileWrapper(open(filename, 'rb'), chunk_size),
content_type=mimetypes.guess_type(filename)[0])
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = "attachment; filename=%s" % filename[filename.find("UserSessionDetails-")+19:]
return response
return render(request, 'something/something/index.html')
download.html
<canvas id="c-timer" width="300" height="300">
<input id="pdf_file_location" type="hidden" value={{ pdf_file_location }} name="pdf_file_location"/>
</canvas>
JS для download.html
var val = document.getElementById('pdf_file_location').value
data ={"pdf_file_location": val};
something something and then finishTime is called
var finishTime = function() {
$.post("/book_publish/download/",data);
};
У меня нет много знаний о том, как IDM работает, но чтение this article говорит мне, что он не должен давать никаких преимуществ, кроме того, что он открывает несколько co nnections для операции, а мой код отправляет данные в куски. Неужели браузер не может сшить данные, когда он отправлен небольшими кусками?