我想创建一个小型web服务器。我正在阻止显示一个带有专用html块的图像。
那里有我的网络服务器的代码
from http.server import SimpleHTTPRequestHandler, HTTPServer
import time
import socket
import json
import os
import socketserver
hostName = "127.0.0.1"
serverPort = 8080
class MyServer(SimpleHTTPRequestHandler):
head = """
<head lang="fr">
<title>Title</title>
<meta charset="utf-8">
</head>
"""
navbar = """<nav><a class="navbar-brand" href="#"><img src="my_img.png"></a></nav>"""
def index(self):
print(os.listdir())
# List the directory -> my_img is present
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes(self.head, "utf-8"))
self.wfile.write(bytes("<body>", "utf-8"))
self.wfile.write(bytes(self.navbar, "utf-8"))
p = """
<div class="container-fluid">
<div class="row">
<div class="col-md-2"></div>
<div class="col-md-8">
<h1>Dashboard</h1>
<h2>Bienvenue !</h2>
<img src="my_img.png">
</div>
</div>
</div>
"""
self.wfile.write(bytes(p, "utf-8"))
self.wfile.write(bytes("</body></html>", "utf-8"))
def do_GET(self):
if self.path == "/":
self.index()
else:
self.send_response(404)
self.send_header("Content-type", "text/html")
self.end_headers()
if __name__ == "__main__":
webServer = HTTPServer((hostName, serverPort), MyServer)
print("Server started http://%s:%s" % (hostName, serverPort))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
print("Server stopped.")
因此图像不会显示
在chrome控制台调试器上:
Failed to load resource: the server responded with a status of 404 (Not Found)
我使用以下命令启动web服务器:
python3 WebServer.py
在当前目录中:
谢谢@diggusbickus,
要调整的部分是do_GET函数:
def do_GET(self):
if self.path == "/":
self.index()
elif self.path == "/my_img.png":
imgname = self.path
imgname = imgname[1:]
imgfile = open(imgname, 'rb').read()
mimetype = mimetypes.MimeTypes().guess_type(imgname)[0]
self.send_response(200)
self.send_header('Content-type', mimetype)
self.end_headers()
self.wfile.write(imgfile)
else:
self.send_response(404)
self.send_header("Content-type", "text/html")
self.end_headers()
添加了新的elif,请求的图像的名称。
在此之前,由于do_GET功能受到太多限制,网页不应显示此内容。
我们检索名称(删除图像名称中的第一个字符)-
我们检索mimetype(jpeg/png/…)
我们发送图像的字节。
它解决了我的问题,图像显示在网页上。
你的Webserver.py工作正常(在macos上用火狐/Safari/chrome测试)
的错误
Failed to load resource: the server responded with a status of 404 (Not Found)
出现的原因是您请求的资源(例如my_img.png
)不存在于请求的路径中,该路径应该显示在错误消息之后。从另一个问题中举一个例子。
Failed to load resource: the server responded with a status of 404 (Not Found)
/* -here-> */ http://localhost:8080/RetailSmart/jsp/Jquery/style.css
你也应该贴出来。
通常,遇到此类错误是因为您在IDE(例如pycharm)中编译并启动脚本,IDE通常将源文件(例如src
目录下的文件)和生成文件(例如dest/output/build
目录)分开。而且有必要对您的资源使用精确的相对路径
,以使您的服务器能够正确访问它。