python 网络服务器 html 不显示图像

python webserver html don't display image

我想创建一个小型网络服务器。 我正在阻止显示带有专用 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)

我用这个命令启动网络服务器:

 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 上用 firefox/safari/chrome 测试)

的错误
Failed to load resource: the server responded with a status of 404 (Not Found)

出现是因为你请求的资源(比如my_img.png)在请求的路径中不存在,应该显示在错误信息之后。举另一个问题的例子,ref.

Failed to load resource: the server responded with a status of 404 (Not Found) 
/* -here-> */ http://localhost:8080/RetailSmart/jsp/Jquery/style.css

你也应该 post 它。

一般来说,遇到此类错误是因为您在 IDE(例如 pycharm)中编译和启动脚本,这通常会分隔源文件(例如 src 下的文件)目录)和构建文件(比如 dest/output/build 目录)。并且有必要对您的资源使用精确的relative path以使您的服务器可以正确访问它。