【问题标题】:Create response with file as content以文件为内容创建响应
【发布时间】:2021-06-16 13:14:59
【问题描述】:

我想创建一个以 mp4 视频为内容的 http 响应
按照我找到的here 的建议,这就是我目前所拥有的:

    resp = Response()
    resp.status_code = 200
    with open("unit_tests/unit_test_data/testvid 2 - public_2.mp4", "rb") as vid:
        resp._content = vid.read(1024 * 1024)
    resp.headers = {"content-length": "13837851"}

然后将按如下方式使用此响应:

    with open(fname, "wb") as file:
        for data in resp.iter_content(chunk_size=1024):
            size = file.write(data)

但是在第二部分,当我尝试阅读我的回复内容时,我收到以下错误:

    AttributeError: 'NoneType' object has no attribute 'read'  

欢迎任何帮助,谢谢!

【问题讨论】:

    标签: python request httprequest


    【解决方案1】:

    这里有多个可以帮助您的逻辑的 sn-ps。 (未经测试,因此可能需要一些更正)

    myFileNameToSend = "unit_tests/unit_test_data/testvid 2 - public_2.mp4"
    

    第 1 步:将要发送的文件编码为 base64 字符串

    import base64
    myFileToSend = open(myFileNameToSend, 'rb')
    myFileContent = myFileToSend.read()
    myFileStringToSend = base64.b64encode(myFileContent).decode('ascii')
    

    第 2 步:实际发送字符串作为响应

    from fastapi import Request,FastAPI, File, UploadFile, Form
    import requests
    api = FastAPI()
    @api.get("/test") #this is where your webserver is listening for post requests
    def test():
        return {"filename": myFileNameToSend.split("/")[-1],"dataAsAscii":myFileStringToSend}
    

    第 3 步:将 base64 字符串解码回字节

    import json
    import base64
    import requests
    jsonReceived = initialRequest.json() #initialRequest is your request object to which you are expecting to get a response
    myFileNameReceived = jsonReceived["filename"]
    myFileStringReceived = jsonReceived["dataAsAscii"].encode('ascii')
    myFileReceived = base64.b64decode(myFileStringReceived)
    f = open(myFileNameReceived, 'wb')
    f.write(myFileReceived)
    f.close()
    

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 2013-08-17
      • 1970-01-01
      • 2021-04-20
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多