python

[fastapi] upload json file

sarahsarah 2023. 2. 25. 13:43

json file 하나를 업로드하여 파일 내 데이터를 리턴하는 api 작성.

 

import uvicorn
import json
from fastapi import FastAPI, File, UploadFile

app = FastAPI(title="test-json-file-upload",
              version='1.0.0',)

## file upload test
@app.post("/upload")
def upload(file: UploadFile = File(...)):
    try:
        # with open(file.filename, 'wb') as f:
        #     f.write(contents)

		# print(f"[upload] file.filename {file.filename}")
        # with file.file.read() as contents:
        #     json_input = json.loads(contents) # error!

        contents = file.file.read()
        json_input = json.loads(contents)
    except Exception as err:
        return {"message": f"There was an error uploading {file.filename}",
                "errMsg": f"{err}"}
    finally:
        file.file.close()
    return {"message": f"Successfully uploaded {file.filename}",
            "data": json_input}
            
            
if __name__ == '__main__':
    uvicorn.run("main:app", host='127.0.0.1', port=4000, reload=True)

 

여러파일을 가져올 경우

@app.post("/files/")
async def create_files(files: List[bytes] = File(...)):
    return {"file_sizes": [len(file) for file in files]}

@app.post("/uploadfiles")
async def create_upload_files(files: List[UploadFile] = File(...)):
    UPLOAD_DIRECTORY = "./"
    for file in files:
        contents = await file.read()
        with open(os.path.join(UPLOAD_DIRECTORY, file.filename), "wb") as fp:
            fp.write(contents)
    return {"filenames": [file.filename for file in files]}