Fastapi上傳下載文件

1.上傳文件 upload.py

from typing import List
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
upload = FastAPI()

# 第一種讀取文件方法顷窒,讀取二進制文件
@upload.post("/files/")
async def create_files(files: List[bytes] = File(...)):
    # 保存文件名
    # with open('保存文件名字', 'wb') as f:
    #     f.write(files[0])
    return {"file_sizes": [len(file) for file in files]}

# 第二種讀取文件的方法珠移,會報錯文件名,文件本身等信息
@upload.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    
    # 保存文件
    # data = await files[0].read()
    # with open('保存文件名字', 'wb') as f:
    #     f.write(data)
    return {"filenames": [file.filename for file in files]}

@upload.get("/")
async def main():
    content = """
<body>
<form action="/files/" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit">
</form>
<form action="/uploadfiles/" enctype="multipart/form-data" method="post">
<input name="files" type="file" multiple>
<input type="submit">
</form>
</body>
    """
    return HTMLResponse(content=content)

if __name__ == '__main__':
    import uvicorn
    uvicorn.run('upload:upload', host='0.0.0.0', port=8900)

輸入:http://0.0.0.0:8900/


上傳文件

2.下載文件 download.py

import pandas as pd
from fastapi import FastAPI
from fastapi.responses import FileResponse,StreamingResponse,Response
import io

download = FastAPI()
file_path = "文件路徑"

# 假設有個pandas DataFrame文件文件需要保存
@download.get("/from_data/")
def main():
    df = pd.DataFrame([1,2,3])
    stream = io.StringIO()
    df.to_csv(stream, index=False)
    response = StreamingResponse(iter([stream.getvalue()]), media_type="text/csv")
    response.headers["Content-Disposition"] = "attachment; filename=export.csv"
    return response

# 假設我們預定了文件的路徑
@download.get("/from_path/")
def main():
    return FileResponse(path=file_path, filename=file_path, media_type='py')


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('download:download', host='0.0.0.0', port=8800)

輸入:http://0.0.0.0:8900/from_data/ 或者 http://0.0.0.0:8900/from_path/

下載文件

3.下載excel文件

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name:     xxx
   Description :
   Author :       asdil
   date:          2022/5/11
-------------------------------------------------
   Change Activity:
                   2022/5/11:
-------------------------------------------------
"""
__author__ = 'Asdil'
import pandas as pd
from fastapi import FastAPI
from fastapi.responses import FileResponse,StreamingResponse,Response
import io

download = FastAPI()
file_path = "文件路徑"

# 假設有個pandas DataFrame文件文件需要保存
@download.get("/from_data/")
def main():
    df = pd.DataFrame([1,2,3])
    stream = io.BytesIO()
    writer = pd.ExcelWriter(stream, engine='xlsxwriter')
    df.to_excel(writer, index=False)
    writer.save()
    xlsx_data = stream.getvalue()
    response = StreamingResponse(io.BytesIO(xlsx_data))
    response.media_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    response.headers['Content-Disposition'] = f'attachment; filename="這里是你要保存的名字.xlsx"'.encode("utf-8").decode("latin1")
    return response


if __name__ == '__main__':
    import uvicorn
    uvicorn.run('xxx:download', host='0.0.0.0', port=8800)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碳想,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痊剖,更是在濱河造成了極大的恐慌卫旱,老刑警劉巖熙宇,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绳匀,居然都是意外死亡迹蛤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門襟士,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嚷量,你說我怎么就攤上這事陋桂。” “怎么了蝶溶?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵嗜历,是天一觀的道長。 經(jīng)常有香客問我抖所,道長梨州,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任田轧,我火速辦了婚禮暴匠,結果婚禮上,老公的妹妹穿的比我還像新娘傻粘。我一直安慰自己每窖,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布弦悉。 她就那樣靜靜地躺著窒典,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稽莉。 梳的紋絲不亂的頭發(fā)上瀑志,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音,去河邊找鬼劈猪。 笑死昧甘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的岸霹。 我是一名探鬼主播疾层,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贡避!你這毒婦竟也來了痛黎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤刮吧,失蹤者是張志新(化名)和其女友劉穎湖饱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杀捻,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡井厌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了致讥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅仆。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖垢袱,靈堂內(nèi)的尸體忽然破棺而出墓拜,到底是詐尸還是另有隱情,我是刑警寧澤请契,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布咳榜,位于F島的核電站,受9級特大地震影響爽锥,放射性物質(zhì)發(fā)生泄漏涌韩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一氯夷、第九天 我趴在偏房一處隱蔽的房頂上張望臣樱。 院中可真熱鬧,春花似錦腮考、人聲如沸擎淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘴拢。三九已至,卻和暖如春寂纪,著一層夾襖步出監(jiān)牢的瞬間席吴,已是汗流浹背赌结。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孝冒,地道東北人柬姚。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像庄涡,于是被迫代替她去往敵國和親量承。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • ftp 文件傳輸協(xié)議 跨平臺 上傳下載文件 vsftpd 工具:非常安全的文件傳輸協(xié)議穴店;默認的命令端口21號撕捍,數(shù)據(jù)...
    柒夏錦閱讀 4,026評論 1 9
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險泣洞,但是人生放棄了冒險忧风,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,046評論 0 4
  • 公元:2019年11月28日19時42分農(nóng)歷:二零一九年 十一月 初三日 戌時干支:己亥乙亥己巳甲戌當月節(jié)氣:立冬...
    石放閱讀 6,877評論 0 2