在 python 中使用 HTTP 将图像从服务器发送到客户端

Sending an image from a server to client using HTTP in python

我正在创建一个 Web 服务器来处理客户端请求并通过 HTTP 发送数据。我使用了 python,它非常适合文本、pdf 和 html 文件。当我尝试通过此服务器发送 jpg 图像时,客户端显示图像无法显示,因为它在客户端中包含错误。我使用了本网站提供的不同方法,但都失败了。有人能帮我吗??图片发送部分代码如下。提前致谢...

req = clnt.recv(102400)
a = req.split('\n')[0].split()[1].split('/')[1]
if a.split('.')[1] == 'jpg':
    path =  os.path.abspath(a)
    size = os.path.getsize(path)
    img_file = open(a, 'rb') 
    bytes_read = 0
    while bytes_read < size:
        strng = img_file.read(1024)
        if not strng:
            break
        bytes_read += len(strng)
    clnt.sendall('HTTP/1.0 200 OK\n\n' + 'Content-type: image/jpeg"\n\n' + strng)
    clnt.close()
    time.sleep(30)

每次对文件执行读取操作时,您都在覆盖字符串。如果文件大于 1024 字节,您将丢失先前读取的块。最后一次读取将 return EOF 处的空字符串,因此 strng 最终将成为空字符串。

strng = img_file.read(1024)

我想你是想使用 +=?:

strng += img_file.read(1024)

像这样分块读取文件并没有什么好处。一次读取所有文件内容将消耗相同数量的内存。您可以这样做:

if a.split('.')[1] == 'jpg':
    path =  os.path.abspath(a)
    with open(a, 'rb') as img_file:
        clnt.sendall('HTTP/1.0 200 OK\n\n' + 'Content-type: image/jpeg"\n\n' + img_file.read())
    clnt.close()
    time.sleep(30)

此外,严格来说,对于 HTTP,那些 \n 个字符应该是 \r\n