Upload file using fastapi
Solution 1:
@app.post("/create_file/")
async def image(image: UploadFile = File(...)):
print(image.file)
# print('../'+os.path.isdir(os.getcwd()+"images"),"*************")
try:
os.mkdir("images")
print(os.getcwd())
except Exception as e:
print(e)
file_name = os.getcwd()+"/images/"+image.filename.replace(" ", "-")
with open(file_name,'wb+') as f:
f.write(image.file.read())
f.close()
file = jsonable_encoder({"imagePath":file_name})
new_image = await add_image(file)
return {"filename": new_image}
Solution 2:
Original answer is here. Please note that, the answer below uses synchronous writing for writing files to disk. If you need async writing, please have a look at aiofiles and the answer here.
app.py
import uvicorn
from fastapi import File, UploadFile, FastAPI
from typing import List
app = FastAPI()
def save_file(filename, data):
with open(filename, 'wb') as f:
f.write(data)
@app.post("/upload")
async def upload(files: List[UploadFile] = File(...)):
# in case you need the files saved, once they are uploaded
for file in files:
contents = await file.read()
save_file(file.filename, contents)
return {"Uploaded Filenames": [file.filename for file in files]}
if __name__ == '__main__':
uvicorn.run(app, host='127.0.0.1', port=8000, debug=True)
test.py
import requests
url = 'http://127.0.0.1:8000/upload'
files = [('files', open('images/1.png', 'rb')), ('files', open('images/2.png', 'rb'))]
resp = requests.post(url=url, files = files)
print(resp.json())