2015-12-12 8 views
1

У меня есть простой фляжный сервер. Я загрузил, используя pafy, видео из ссылки YouTube, предоставленной пользователем.Загрузите загруженное видео с флягой

@app.route('/') 
def download(): 
    return render_template('basic.html') 

Шаблон Basic.html имеет форму, которая представляет действие для загрузки:

<form action="download_vid" method="post"> 
Link: <input type="text" name="download_path"><br> 
<input type="submit" value="Submit"> 
</form> 

У меня есть другая конечная точка,/download_vid который выглядит следующим образом.

@app.route('/download_vid', methods=['POST']) 
def download_vid(): 
    url = request.form['download_path'] 
    v = pafy.new(url) 
    s = v.allstreams[len(v.allstreams)-1] 
    filename = s.download("static/test.mp4") 
    return redirect(url_for('done')) 

Желаемая ссылка действительно загружается как .mp4-файл в мою статическую папку. Я могу посмотреть его, и я также могу использовать его в качестве источника для тега в HTML-файле, если я его открываю локально.

@app.route('/done') 
def done(): 
    return app.send_static_file('test.mp4') 

Из того, что я понимаю, 'send_static_file' служит для файлов из статического каталога. Тем не менее, я получаю ошибку 404, когда я запускаю сервер, хотя видео явно там.

Я также попробовал другую версию для Done():

@app.route('/done') 
def done(): 
    return return render_template('vid.html') 

Здесь vid.html находится в шаблонах и имеет жесткий кодированный путь к статическому/test.mp4. Он загружается после завершения загрузки. В этом случае у меня нет ошибки 404, но тег ничего не делает, он просто серый. Если я открываю vid.html локально (дважды щелкните по нему), он работает, он показывает видео.

Не могли бы вы помочь мне понять, что происходит?

То, что я хочу, чтобы достичь это:

  1. Берут вход от пользователя [Done]
  2. Используйте этот вход для загрузки видео [Done]
  3. Подавать это видео обратно пользователю [??? ]

ответ

2

Я думаю, что у вас что-то происходит с файловыми путями или файловыми разрешениями.

  • Загрузка видеофайла в static развернуть?
  • Является ли каталог static в том же каталоге, наряду с вашим файлом main.py?
  • У вашего флеш-приложения есть разрешения на чтение файла?

Я думаю, что причина ваш файл не сработал в шаблоне HTML, потому что вы ссылаться как static/test.mp4 из URL - /done который переводит видео путь быть /done/static/test.mp4.

Вместо того, чтобы пытаться нажать файл с помощью Flask, вы можете перенаправить на фактический файл мультимедиа.

@app.route('/done') 
def done(): 
    return redirect('/static/test.mp4') 
+0

Hello. Спасибо за ответ. Да, видео загружается в статический. Да, static находится в том же каталоге, что и my main.py (я называю его route.py). Да, у него есть разрешение. Поскольку он может писать там, я предполагаю, что он также может читать. Конечно, я запускаю сервер с sudo. Тем не менее, никакого результата. Я также попробовал: app.send_static_file (url_for ('static', filename = '' test.mp4 '')) – RandomGuyqwert

+0

Я пробовал, что вы предложили, и я получаю эту ошибку: Не найдено Запрашиваемый URL-адрес не найден на сервере. Если вы указали URL вручную, проверьте правильность написания и повторите попытку. Файл явно там. И это работает. – RandomGuyqwert