提问者:小点点

python Web服务器html不显示图像


我想创建一个小型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

在当前目录中:

  • 网络服务器。py

共2个答案

匿名用户

谢谢@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目录)分开。而且有必要对您的资源使用精确的相对路径,以使您的服务器能够正确访问它。

相关问题