从Python的http.server服务文件-正确响应文件

Clo*_*one 6 servlets basehttpserver simplehttpserver httpserver python-3.x

我只是想从http.server提供PDF文件。这是我的代码:

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyServer(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/pdf')
        self.send_header('Content-Disposition', 'attachment; filename="file.pdf"')
        self.end_headers()

        # not sure about this part below
        self.wfile.write(open('/filepath/file.pdf', 'rb'))


myServer = HTTPServer(('localhost', 8080), MyServer)
myServer.serve_forever()
myServer.server_close()
Run Code Online (Sandbox Code Playgroud)

我不确定file.pdf现在该如何回应,却一无所获。我相信标头是正确的,但我无法设法将实际文件发送过来。

nal*_*d88 6

好像您说的那样正确设置了标题。我已经完成了您仅尝试使用文本数据(CSV)进行的操作。如图所示,代码的一个问题是您试图写入文件对象,而不是实际数据。您需要执行一次操作read才能实际获取二进制数据。

def do_GET(self):

    # Your header stuff here...

    # Open the file
    with open('/filepath/file.pdf', 'rb') as file: 
        self.wfile.write(file.read()) # Read the file and send the contents 
Run Code Online (Sandbox Code Playgroud)

希望这至少可以使您更接近一点。