There is a method:

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); }); 

When this code tries to download a video that is larger than a certain value (I haven’t determined the exact value yet, but it is somewhere between 33-72 MB), the following happens:

 [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 + '.webm') data['filename'] = os.path.join(settings.MEDIA_URL, 'video', lesson_name + '.mp4') return Response(data) 

What is wrong here?

  • Upload to server or download to client (browser)? Something incomprehensible to you from the question in the GET console everywhere. Does the error appear on the test server or during production on the production? - FeroxTL
  • @FeroxTL on the test. Everything works in production. - Viktor
  • In general, this is not a very good practice - to give files through the view, can try to put it somewhere in the media, and in this request just give the link to download the full file (already from the media) - FeroxTL
  • Is the question still relevant or has a solution been found? - Igor

1 answer 1

The possible cause of the error is that

runserver used, which is not intended for real use. Broken pip occurs, for example, if a request from the browser was suddenly interrupted. Solution of the problem: instead of using the runserver , something intended not for development, but for real use. Like Gunicorn .

Quote taken from the answer of Nikita Konin

  • Yes, Gunicorn was in production, and everything worked - Viktor