在 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
。
我正在创建一个 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
。