我正在创建一个处理客户端请求并通过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)
答案 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
。