2016-06-20 8 views
2

Ich habe eine Methode zu laden:- Broken pipe, wenn versuchen, ein Video größer als 72 MB

startLesson: function(lesson) { 
    var scope = this; 

    scope.getLessonDataFromFile(lesson.id).then(function (data) { 
    scope.mode = 'LESSON'; 
    scope.lesson.name = lesson.filename; 
    scope.lesson.task = data; 
    scope.lesson.taskHash = hash(JSON.stringify(scope.lesson.task)); 
    scope.lesson.flags = []; 
    scope.lesson.score = []; 
    scope.lesson.visibleDescriptions = []; 
    scope.lesson.visibleDescriptionActions = []; 
    scope.lesson.editMode = false; 
    scope.lesson.analysisMode = false; 
    scope.lesson.totalScore = 0; 
    scope.lesson.maxScore = scope.lesson.task.timeslots.length * 15; 
    $("#video")[0].load(); 
    $("#video")[0].addEventListener("canplay", scope.updateDurationOnCanplay, false); 
}); 

Wenn dieser Code das Video herunterladen versucht (ich habe noch nicht den genauen Wert festgelegt, aber es ist irgendwo im Bereich 33-72 MB) größer ist als die Größe von einem bestimmten Wert, geschieht folgendes:

[20/Jun/2016 15:24:18] "GET /lessons/api/lessons/01 HTTP/1.1" 200 6760 
[20/Jun/2016 15:24:19] "GET /media/video/01.mp4 HTTP/1.1" 200 190267623 
[20/Jun/2016 15:24:19] "GET /media/video/01.mp4 HTTP/1.1" 200 688128 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run 
    self.finish_response() 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 128, in finish_response 
    self.write(data) 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 217, in write 
    self._write(data) 
    File "/usr/lib/python2.7/socket.py", line 328, in write 
    self.flush() 
    File "/usr/lib/python2.7/socket.py", line 307, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 104] Connection reset by peer 
[20/Jun/2016 15:24:19] "GET /media/video/01.mp4 HTTP/1.1" 500 59 
- Broken pipe from ('127.0.0.1', 44686) 

My API:

@staticmethod 
def get(request, lesson_name): 
    data_file_path = os.path.join(VIDEO_ROOT, lesson_name + '.json') 
    data = {} 
    try: 
     with open(data_file_path, 'r') as data_file: 
      data = json.load(data_file) 
    except IOError: 
     data['timeslots'] = [] 
    data['id'] = lesson_name 
    data['filename'] = os.path.join(settings.MEDIA_URL, 'video', lesson_name + '.mp4') 

    return Response(data) 

Was könnte ein Grund für solch einen seltsamen Fehler sein?

+0

Welchen Webserver benutzen Sie? Was wsgi Handler? –

Antwort

2

Für große Dateien sollten Sie Djangos StreamingHttpResponse:

import os 
import mimetypes 
from wsgiref.util import FileWrapper 
from django.http import StreamingHttpResponse 


def get(request, lesson_name): 

    video_path = 'path_to_file' 

    wrapper FileWrapper(open(video_path)) 
    response = StreamingHttpResponse(wrapper, content_type=mimetypes.guess_type(video_path)[0]) 
    response['Content-Length'] = os.path.getsize(video_path) 

jedoch - Sie wahrscheinlich müssen auch einige Anpassungen auf Ihren Webserver-Konfiguration vornehmen. Verwenden Sie Apache2 oder Nginx? Und Anwendungsserver in Verwendung. Gunicorn? Django uWSGI?

Verwandte Themen