Python无法向浏览器

时间:2017-06-19 02:13:08

标签: python apache wamp mp4

我试图将家庭WAMP服务器(Windows 8)中的视频文件提供给浏览器,但浏览器不断给出错误500,并且apache日志显示来自脚本' s.py&#39的格式错误的标题;:错误的标题:G @

" s.py"是我的python版本3.4脚本

n="\\wamp\\www\\r.mp4"
print ("Last-Modified: Fri, 24 Apr 2015 22:09:52 GMT")
print ("Accept-Ranges: bytes")
print ("Content-Length:", os.path.getsize(n))
print ("Content-type: video/mp4\r\n\r\n")

f=open(n, 'rb')
d=f.read()
sys.stdout.buffer.write(d)
sys.stdout.flush()
f.close()

我可以使用浏览器在服务器上运行其他简单的python脚本,所以我知道这有效,但由于某种原因它不会提供这个mp4文件。

在浏览器中我使用URL" localhost / s.py"来调用它,然后它只给出错误500,服务器日志显示格式错误的标题。

我整天都在努力,任何人都知道如何解决它,

由于

2 个答案:

答案 0 :(得分:0)

Python可用于向您的浏览器提供MP4。但是你不能把Python脚本扔到WAMP服务器上,就像它是一个PHP脚本一样。

如果您准备让Python Web应用程序通过Apache服务器提供视频,那么您必须构建一个WSGI应用程序并查看mod_wsgi以便能够使用Apache提供Python应用程序。您也可以在没有Apache的情况下运行WSGI应用程序。

从目录提供mp4视频的过度简化的WSGI应用程序可能是:

import os
from flask import Flask, send_file, make_response


APP = Flask(__name__)
MEDIA_PATH = '/path/to/your/media/directory'


@APP.route('/<vid_name>')
def serve_video(vid_name):
    vid_path = os.path.join(MEDIA_PATH, vid_name)
    resp = make_response(send_file(vid_path, 'video/mp4'))
    resp.headers['Content-Disposition'] = 'inline'
    return resp


if __name__ == '__main__':
    APP.run()
  1. 使用您的视频目录的完整路径编辑MEDIA_PATH。

  2. 将此脚本保存为video_server.py(例如)。

  3. 运行此脚本python video_server.py

  4. 通过浏览器访问localhost:5000 / some_video.mp4(其中some_vdeo.mp4是现有视频的名称)

  5. 注意:您可以使用关键字arguments port和/或host:

    编辑APP.run()
    • port:能够侦听不同的端口。 APP.run(port=8000)
    • 主持人:收听来自计算机外部的请求。 APP.run(host='0.0.0.0)

    编辑:flask是需要安装的外部库。在网站上查看安装说明。简单版本:pip install flask

答案 1 :(得分:0)

我只是遇到了完全相同的问题(使用pdf而不是mp4)。您的原始代码已接近。问题是sys.stdout.flush必须在sys.stdout.buffer.write之前,以确保头文件首先出现。修改后的代码如下,对我有用。

n="\\wamp\\www\\r.mp4"
print ("Last-Modified: Fri, 24 Apr 2015 22:09:52 GMT")
print ("Accept-Ranges: bytes")
print ("Content-Length:", os.path.getsize(n))
print ("Content-type: video/mp4\r\n\r\n")
sys.stdout.flush()

f=open(n, 'rb')
d=f.read()
sys.stdout.buffer.write(d)
f.close()