2017-02-22 1 views
0

Mein Django-Projekt verwendet den folgenden Code zum Herunterladen der Datei. Es funktioniert alles gut, wenn der Client-Rechner IDM installiert hat, aber nicht funktioniert, wenn IDM nicht installiert ist. Ich konnte keinen Grund für diese Seltsamkeit finden.Django-Download funktioniert nicht mit Browser, funktioniert aber auf Computern, auf denen Internet Download Manager (IDM) installiert ist

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 für die 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); 
     }; 

Ich habe nicht viel Wissen darüber, wie IDM funktioniert, aber Lesen this article sagt mir, dass es keine Oberhand abgesehen von der Tatsache geben sollte, dass es mehrere Co öffnet Verbindungen für die Operation, und mein Code sendet Daten in Blöcken. Kann der Browser die Daten nicht zusammenfügen, wenn sie in kleinen Blöcken gesendet werden?

Antwort

0

PROBLEM: Das Problem war, dass ich JS verwendete, um eine Anforderung für den Download zu stellen, und da ich ein Neuling im Web bin, konnte ich die Anfrage nicht zurücksenden. Daher wurde alles durcheinander gebracht.

Und irgendwie IDM war in der Lage, diese Antwort zu fangen und den Download-Prozess zu initiieren.

LÖSUNG: habe ich eine einfache Form Post und Absenden-Button im HTML selbst und die JS nicht für Post-Anforderung verwenden.

Verwandte Themen