【问题标题】:Fastapi Upload a ImageFastapi 上传图片
【发布时间】:2021-06-24 21:11:54
【问题描述】:

我尝试从 Cordova Webapp 将图像上传到 fastapi 并收到以下错误:

{"detail":[{"loc":["body","terms"],"msg":"field required","type":"value_error.missing"},{"loc":["body","privacy"],"msg":"field required","type":"value_error.missing"}]}

INFO:     192.168.1.129:51915 - "POST /upload/ HTTP/1.1" 422 Unprocessable Entity

我的 FastApi 代码是:

@app.post("/upload/", dependencies=[Depends(valid_content_length)])
async def create_upload_file(file: bytes = File(...), terms: str = Form(...), privacy: str = Form(...)):
    allowedFiles = {"image/jpeg", "image/png", "image/gif", "image/tiff", "image/bmp", "video/webm"}
    if file.content_type in allowedFiles:
        filename = str(uuid.uuid4())
        with open("uploaded_images" + filename + file.filename, "wb") as buffer:
            shutil.copyfileobj(file.file, buffer)
        return {"filename": file.filename}
    else:
        return "miau"

客户代码:

<form method="post" action="http://192.168.1.129:8080/upload">

                <div class="form_row">
                    <label for="myfile">Choose your image:</label>
                    <input type="file" id="myfile" name="file">
                </div>
                <div class="form_row">

                        <label>Accept:</label>
                        <label class="label-checkbox item-content">
                            <input type="checkbox" name="my-checkbox" value="privacy" required>
                            <div class="item-media">
                                <i class="icon icon-form-checkbox"></i>
                            </div>
                            <div class="item-inner">
                                <div class="item-title"><a src="" target="_blank">Privacy Policy</a></div>
                            </div>
                        </label>

                        <label class="label-checkbox item-content">
                            <input type="checkbox" name="my-checkbox" value="terms" required>
                            <div class="item-media">
                                <i class="icon icon-form-checkbox"></i>
                            </div>
                            <div class="item-inner">
                                <div class="item-title">Terms of Use</div>
                            </div>
                        </label>
                        <label class="label-checkbox item-content">
                            <input type="submit" name="submit" class="form_submit" id="submit" value="Send"/>
                        </label>
                </div>
            </form>

如何解决问题?根据错误,主体是空的,但我不知道问题是什么。

谢谢:)

【问题讨论】:

    标签: python html cordova fastapi


    【解决方案1】:

    错误说明了一切

    "loc":["body","terms"],"msg":"field required"
    

    "loc":["body","privacy"],"msg":"field required"
    

    这意味着您的表单没有提交termsprivacy 字段。

    如果您查看您的 HTML 代码,您可以看到两个输入都具有名称 my-checkbox,而 fastapi 路由需要两个参数:privacyterms

    更改输入的名称以匹配两个参数

    【讨论】:

    • 谢谢。玩得太多了:D 上传有效,但是一旦我切换到文件: UploadFile = File(...) 它就会出现: {"detail":[{"loc":["body", "file "], "msg": "预期的 UploadFile,收到:", "type": "value_error"}]}
    • 必须将 enctype="multipart/form-data" 添加到表单中
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2021-03-19
    • 2010-12-02
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多