отправить файл пользователю при создании файла - PullRequest
0 голосов
/ 03 декабря 2018

Я использую moviepy для создания нового фильма, когда пользователь нажимает кнопку на HTML-странице.Я хотел бы вернуть новый фильм пользователю.Но создание фильма требует времени.Что я могу сделать для отправки_файла только при создании файла?

@app.route('/createVideo', methods=['POST'])
def createVideo():
    content = request.get_json()
    videoPromo = content['videoPromo']
    videoPerso = content['videoPerso'] 
    subclip1 = VideoFileClip(videoPromo)
    subclip2 = VideoFileClip(content['videoPerso'])
    subclip = concatenate_videoclips([subclip1, subclip2], method="compose")
    subclip.write_videofile("out.mp4",progress_bar = False)
    vid_path = os.path.join(MEDIA_PATH, 'out.mp4')
    return send_file(vid_path)

Мой HTML-код:

    <video id="videoPromo" controls class="video-js vjs-default-skin vjs-big-play-centered">
      <source src="http://localhost:5000/var/myvideo.mp4" type="video/mp4">
    </video>

    <video id="videoPerso" controls class="video-js vjs-default-skin vjs-big-play-centered">
      <source src="http://localhost:5000/var/oceans.mp4#t=0.7" type="video/mp4">
    </video>


    <div class="btn-group" role="group" aria-label="...">
      <button class="create-video btn btn-default" type="button">Create Video</button>
    </div>
<script>

$(".create-video").click(function(){

  $.ajax({
    type: "POST",
    url: "/createVideo",
    data: JSON.stringify({  videoPerso: $("#videoPerso source").attr("src") , videoPromo: $("#videoPromo source").attr("src")}),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data){                console.log(data);
},
    failure: function(errMsg) {
        alert(errMsg);
    }
});
  });
</script>

1 Ответ

0 голосов
/ 04 декабря 2018

Если ваша задача занимает некоторое время, и вы не хотите, чтобы пользователь ждал (и заблокировал интерпретатор python!), Вы можете вернуть временный результат, скажем что-то вроде «обработка ...», а затем запустить его.фоновая задача, использующая какую-то очередь задач, например celery .

На своей странице вы можете периодически опрашивать определенную конечную точку, чтобы увидеть, завершило ли фоновое задание создание видео, и получить URL-адрес после его завершения.Вернув URL, вы можете показать видео пользователю.

...