Почему обработчик ошибок срабатывает, когда я пытаюсь отправить ответ на файл django?
Я загружаю видео файл на мой django сервер и сохраняю его в FileSystemStorage. Затем я получаю несколько кадров из этого видео с помощью библиотеки python (PIL) и сохраняю их в fss. Затем я хочу отобразить эти изображения на странице, поэтому я отправляю (в качестве ответа) frames_number, fps, filename.
def loop(request):
if request.method == 'POST':
# save video file in vile storage
file = request.FILES['file']
fss = FileSystemStorage()
fss.save(file.name, file)
# set up class, for work with video
vt = VideoTools(file.name)
# save frames in media storage
frames, fps = vt.get_frames()
# return frames_number and fps
return JsonResponse({
'frames': frames,
'fps': fps,
'filename': file.name,
})
return render(request, 'main/loop.html')
Во фронтенде я считаю, сколько кадров мне нужно, и делаю соответствующее количество POST-запросов, каждый из которых дает мне один кадр, но при получении кадра срабатывает обработчик ошибок. Почему?
success: function(response) {
let fps = response['fps']
let frames = response['frames']
let filename = response['filename']
let frames_needed = Math.round(frames / fps + 1)
for(let i=0; i<=frames_needed; i+fps) {
// making request
let img = get_each_frame(0, filename)
img.done(function(response) {
console.log(response, 'get_frame_response')
})
// getting this handler triggered
img.fail(function(error) {
console.log(error, 'get_frame_error')
})
}
},
function get_each_frame(frame_number, filename) {
let request = $.ajax({
type: "POST",
url: "get_frame",
data: {
'frame_number': frame_number,
'filename': filename,
'csrfmiddlewaretoken': $('[name=csrfmiddlewaretoken]').val(),
},
dataType: "json",
});
return request
}
View.py
def get_frame(request):
frame_number = request.POST['frame_number']
filename = request.POST['filename']
fss = FileSystemStorage()
name = f'frame_{frame_number}_{filename.replace(".mp4", "")}.png'
img = fss.path(name)
return FileResponse(open(img, 'rb'))