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

时间:2017-11-30 08:54:43

标签: python http client-server

我正在创建一个处理客户端请求并通过HTTP发送数据的Web服务器。我使用python,它适用于text,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)

1 个答案:

答案 0 :(得分:0)

每次对文件执行读取时,都会覆盖该字符串。如果文件大于1024字节,您将丢失先前读取的块。最后,最后一次读取将在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