Fastapi: HTTP POST base64

Created on 19 Nov 2020  ·  4Comments  ·  Source: tiangolo/fastapi

Example

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import FileResponse
import base64

app = FastAPI()

os.system('chcp')

@app.post("/uploadbase64")
async def post_base64Image(base64_image: str, photo_name: str):
    imgstr = base64_image
    imgdata = base64.b64decode(imgstr)
    filename = '%s.jpg' % photo_name 
    with open(filename, 'wb') as f:
        f.write(imgdata)

    return base64_image

Description

  • base64_image is a very long string
  • This code is work fine when I use Insomnia.
  • But If I use cURL it got Internal Server Error
  • (curl -X POST "http://127.0.0.1:8000/uploadbase64?base64_image=iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQffDAEWGTmOXnDsAAAAHGlET1QAAAACAAAAAAAAACAAAAAoAAAAIAAAACAAAAK51hVB4gAAAoVJREFUaN60l71OKlEQx38mhsTCoITYgEDhxwt4I6VSaCHPgVZIxwNgbNxQaqfJdr4AnVbKpSPaEChIWBMKrgmNAYx83EKJ7Nlz2A9gpjt7Zv7DnJn/DOBO1olzyjUP1Hinx5ABXf5R5YFrTomzzoIkwBFXPNPii5FCv2jxzBVHBOYLvk2WEh0lsKgdSmTZng/4FhfUHUNPap0LtmYDXyNN1RP4WKukWfMKv0+B/kzwI0b0KbDvHtxHireZwcf6RgqfG3g/Gl0bp5+0aWJg0KTNp83tLhp+p/Ab6AyVrj4oc0eGJHvsECPGDnskyXBHmQ+l3RCdDWfw90oXFTQSBFmSWi4RJIFGRRn+vX0IfnSF8SvnRBxlMMI5rwov+vSH8KFJo2+RY9NVEW+SoyXNojatHFPS0nvi0FMbH/IkLceUyiAuabwBOmHPRBZGZyBpyric9QqS4ZJndSYuXSUvGV4FGTumLaw3IM+KwvEyIaJEfjRKiGXFzRXyliz0SVtHTlVSsepfH6KIQeNHDYqEpmRBl8wIYUxdSkpv2ttHMUy3DaJTa8FajpfmeV+3NN6BTa83TPcbNhxxYGnK+uS+kLXEl7MlG3cBQM6Ckf1dtkrCpxfb1nMfQJgXAaU0XtyOhWVraK3ROQQAaYFlOxx/f9CEyCoOaNddEY7puSIgad8PUJQd24ibNvwV8af+JQBxoT4/SDhw5ZyIJiUh7Ast4nAmUGWZ4KL+WhCkLFD9GdwIablVrBvzkCVuBbQbeBSOMo5ceXsCyAhoj1ATVs2kI0feihBOhPW1Bu+mgzZ/HDny0oYAe7RNdu/QMx002XW497knIoBdmia7HgI7GcQWGkBMyNzwPwAAAP//K85OWAAAAoRJREFUtZa/TmJREMZ/JMbEwmgIoUGBApcXYCPlSqHF+hxoBXQ8ALs23lBqR3E7X8CttBPpiDYEChMuiSbChoYoBuVugQbPn3u5styZbs58Z75zzpyZgTfsT2oRx4tEaQu4NlFPuDiWgBvDs2C4J+krgSQPAm4IPcHQ57uvBFL0BVwPWoLhhX1fCfzkRcC14FIw2BR8JVCQol3CqWSqEPCNQICKFO0UDhkJpjoh3wiEqAuoEYeQ5lEwDsj4RiDDQEB1SUOQa+laDN8IGFKka4I6c4NNXwhs0tAfdY8nqTrlfSGQZyxgntibLASpScxu2Fg4gQ1upCi1yQMAFKUlm9LCCZSUGMXp4hZ30uIjOwsl8EP6azZ3bH12OFL4Xbk+Q0zqahYx1+u/UvY/El0SNBUXk1XHLSNUsWi/q0WViKPvKqayd5OE7JbjVXJ6o8yKw6ZLRIgRfdcYEZYcPFcoSzOHzSs51XGdc4XniLLLLXiRVcpSqbex+cO6zjlNR3F9w5z5Jd3e3lROb9Mh7QTISvPRRzruzBV+R5N6Ns9knSHLGFK1+viUJQ/lWSy7JeXjTaqswbIbcE2TsRO9Je9x6IiS59ZhF5O1WfAwZw7gMQ0MMoQcRpYAITIYNLS3aGNzRtjLCcKYjlvYDKhTocA+Kb4RJ06SFPsUqFCX+r1I3/QWfvIQhjYdxfG1zz0WFvf0pVFTl3rG7MsX0zGr+ZTzaoese+rpZZtzpTp+XV85Z3veQrJOTtMjvqJNcvqq510S/FKatTe947facuaTLYrUpMHNTZ+oURT7/f9LkF2OqdLVNJdp8+pS5Zjd6bC1aAmS5oATLmjxlyFjxgzp0eKCEw5IfzX0P7jvXGFgk1T+AAAAAElFTkSuQmCC&photo_name=tmp" -H "accept: application/json" -d "")
  • The server error is Invalid base64-encoded string: number of data characters (1957) cannot be 1 more than a multiple of 4
  • I am wondering what makes this two different.
  • Or is there any good idea for POST base64?

Environment

  • macOS
  • FastAPI Version: 0.61.1
  • Python version: 3.8.6
question

Most helpful comment

I would strongly recommend not using query strings to pass images, as URLs tend to have a maximum length, and will probably be truncated

All 4 comments

it's better to post base64 with the body ( that's the advantage of POST :) )
What is the maximum possible length of a query string?

curl:
I've just copied the curl command generated by Swagger UI and it worked well

curl -X POST "http://localhost:8000/uploadbase64?base64_image=iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC%2FxhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA%2F4ePzL8AAAAHdElNRQffDAEWGTmOXnDsAAAAHGlET1QAAAACAAAAAAAAACAAAAAoAAAAIAAAACAAAAK51hVB4gAAAoVJREFUaN60l71OKlEQx38mhsTCoITYgEDhxwt4I6VSaCHPgVZIxwNgbNxQaqfJdr4AnVbKpSPaEChIWBMKrgmNAYx83EKJ7Nlz2A9gpjt7Zv7DnJn%2FDOBO1olzyjUP1Hinx5ABXf5R5YFrTomzzoIkwBFXPNPii5FCv2jxzBVHBOYLvk2WEh0lsKgdSmTZng%2F4FhfUHUNPap0LtmYDXyNN1RP4WKukWfMKv0%2BB%2FkzwI0b0KbDvHtxHireZwcf6RgqfG3g%2FGl0bp5%2B0aWJg0KTNp83tLhp%2Bp%2FAb6AyVrj4oc0eGJHvsECPGDnskyXBHmQ%2Bl3RCdDWfw90oXFTQSBFmSWi4RJIFGRRn%2BvX0IfnSF8SvnRBxlMMI5rwov%2BvSH8KFJo2%2BRY9NVEW%2BSoyXNojatHFPS0nvi0FMbH%2FIkLceUyiAuabwBOmHPRBZGZyBpyric9QqS4ZJndSYuXSUvGV4FGTumLaw3IM%2BKwvEyIaJEfjRKiGXFzRXyliz0SVtHTlVSsepfH6KIQeNHDYqEpmRBl8wIYUxdSkpv2ttHMUy3DaJTa8FajpfmeV%2B3NN6BTa83TPcbNhxxYGnK%2BuS%2BkLXEl7MlG3cBQM6Ckf1dtkrCpxfb1nMfQJgXAaU0XtyOhWVraK3ROQQAaYFlOxx%2Ff9CEyCoOaNddEY7puSIgad8PUJQd24ibNvwV8af%2BJQBxoT4%2FSDhw5ZyIJiUh7Ast4nAmUGWZ4KL%2BWhCkLFD9GdwIablVrBvzkCVuBbQbeBSOMo5ceXsCyAhoj1ATVs2kI0feihBOhPW1Bu%2BmgzZ%2FHDny0oYAe7RNdu%2FQMx002XW497knIoBdmia7HgI7GcQWGkBMyNzwPwAAAP%2F%2FK85OWAAAAoRJREFUtZa%2FTmJREMZ%2FJMbEwmgIoUGBApcXYCPlSqHF%2BhxoBXQ8ALs23lBqR3E7X8CttBPpiDYEChMuiSbChoYoBuVugQbPn3u5styZbs58Z75zzpyZgTfsT2oRx4tEaQu4NlFPuDiWgBvDs2C4J%2BkrgSQPAm4IPcHQ57uvBFL0BVwPWoLhhX1fCfzkRcC14FIw2BR8JVCQol3CqWSqEPCNQICKFO0UDhkJpjoh3wiEqAuoEYeQ5lEwDsj4RiDDQEB1SUOQa%2BlaDN8IGFKka4I6c4NNXwhs0tAfdY8nqTrlfSGQZyxgntibLASpScxu2Fg4gQ1upCi1yQMAFKUlm9LCCZSUGMXp4hZ30uIjOwsl8EP6azZ3bH12OFL4Xbk%2BQ0zqahYx1%2Bu%2FUvY%2FEl0SNBUXk1XHLSNUsWi%2Fq0WViKPvKqayd5OE7JbjVXJ6o8yKw6ZLRIgRfdcYEZYcPFcoSzOHzSs51XGdc4XniLLLLXiRVcpSqbex%2BcO6zjlNR3F9w5z5Jd3e3lROb9Mh7QTISvPRRzruzBV%2BR5N6Ns9knSHLGFK1%2BviUJQ%2FlWSy7JeXjTaqswbIbcE2TsRO9Je9x6IiS59ZhF5O1WfAwZw7gMQ0MMoQcRpYAITIYNLS3aGNzRtjLCcKYjlvYDKhTocA%2BKb4RJ06SFPsUqFCX%2Br1I3%2FQWfvIQhjYdxfG1zz0WFvf0pVFTl3rG7MsX0zGr%2BZTzaoese%2BrpZZtzpTp%2BXV85Z3veQrJOTtMjvqJNcvqq510S%2FFKatTe947facuaTLYrUpMHNTZ%2BoURT7%2Ff9LkF2OqdLVNJdp8%2BpS5Zjd6bC1aAmS5oATLmjxlyFjxgzp0eKCEw5IfzX0P7jvXGFgk1T%2BAAAAAElFTkSuQmCC&photo_name=aminjamal" -H  "accept: application/json" -d ""

I don’t know why I use command line to execute the curl still get teh
error, and I take your suggestion, learning how to work with the request
body.

amin jamal notifications@github.com於 2020年11月20日 週五,上午2:01寫道:

is your problem solved?


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/tiangolo/fastapi/issues/2380#issuecomment-730542448,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANLZKESZCKERWEWNDMOPIIDSQVMODANCNFSM4T3SJM4Q
.

I would strongly recommend not using query strings to pass images, as URLs tend to have a maximum length, and will probably be truncated

thank you guys, I change to use request body to get the base64.

Was this page helpful?
0 / 5 - 0 ratings