首页 > 其他分享 >Fastapi和requests文件的下载和上传

Fastapi和requests文件的下载和上传

时间:2024-03-25 22:29:16浏览次数:47  
标签:__ Fastapi filename file path requests 上传

 介绍

FastApi搭建一个简单下载和上传的服务,通过接口将文件保存在服务器上,而通过requests库子在本机中批量从服务器上传和下载文件

FastApi搭建服务

# application.py
"""
fastapi + request 上传和下载功能
"""
from fastapi import FastAPI, UploadFile
from fastapi.responses import FileResponse
import uvicorn

app = FastAPI()


@app.post("/upload", summary="上传接口")
async def upload(file: UploadFile):
    filename = file.filename
    file_size = file.size
    # 保存到服务器指定目录
    with open(filename, "wb") as f:
        for chunk in iter(lambda: file.file.read(1024), b''):
            f.write(chunk)
    print(f"文件:{filename}上传成功,大小{file_size/1024/10224}")
    return {"message": "ok"}


@app.get("/download")
async def read_file(filename: str):
    # 需要下载文件名,从服务器保存文件地址拼接
    print(filename)
    file_path = "1.txt"
    return FileResponse(file_path, filename=filename, media_type="application/octet-stream")


if __name__ == '__main__':
    uvicorn.run("application:app", port=9000)

reqeusts批量下载上传

# test.pt

import requests
import os


def upload_file(file_path):
    url = "http://127.0.0.1:9000/upload"

    with open(file_path, 'rb') as f:
        contents = f.read()

        response = requests.post(url, files={"file": (os.path.basename(file_path), contents, 'multipart/form-data')})
    return response.json()


def download_file1(file_name):
    """方式1,将整个文件下载在保存到本地"""
    url = "http://127.0.0.1:9000/download"
    response = requests.get(url, params={"filename": "1.txt"})
    print(response.text)


def download_file2(file_name):
    """方式2,通过流的方式一次写入8192字节"""
    url = "http://127.0.0.1:9000/download"
    response = requests.get(url, params={"filename": "1.txt"}, stream=True)
    with open(file_name, 'wb') as file:
        for chunk in response.iter_content(chunk_size=8192):
            file.write(chunk)


if __name__ == '__main__':
    upload_file(r"1.txt")

测试

启动fastapi服务

python application.py 

测试下载和上传的功能

python test.py 

服务响应成功,问价也能正常的下载和上传。

标签:__,Fastapi,filename,file,path,requests,上传
From: https://blog.csdn.net/weixin_43413871/article/details/137027968

相关文章

  • Django框架之requests对象
    【一】requests对象引入【1】提交GET请求前端form表单中action属性,如果不写的话,默认就是向当前路由请求form表单中的method属性,如果不写默认就是GET请求<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>{%lo......
  • 【SpringBoot】实现一个简单的图片上传
    前端上传表单<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><formenctype="multipart/form-data"method="post"......
  • Linux文件上传百度云盘轻松解决数据传输和备份
    本文主要的目的就是在Linux环境下通过命令行来使用百度云盘,直接在服务器上打包压缩备份将数据传输到百度网盘,之后可以进行轻松分享,而且还可以支持备份,解决文件的传输和分享难题插件介绍bypy是一个Python客户端,用于操作百度网盘提供了丰富的命令行操作。该工具能够直接在Lin......
  • requests---requests-mock的简单介绍
    前言在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息,进行模拟接口各种场景的异常。requests-mockrequests-......
  • Requestium把requests按在地上摩擦
    From: https://mp.weixin.qq.com/s/XRiYpXvvMW7fGpMgPN39Aw----------------------------------------------------------------------------------------在Python编程中,处理网络请求是一个常见的任务,特别是做爬虫采集数据。最受欢迎的是Requests和Selenium。而Requestium......
  • 爬虫----084-86requests基本使用及get,post请求
    基本使用importrequestsurl='http://www.baidu.com'response=requests.get(url=url)#一个类型和6个属性#print(type(response))#Response类型#设置响应地编码格式response.encoding='utf-8'#以字符串形式返回网页源码#print(response.text)#......
  • 文件上传一-WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过9
    演示案例:PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染PHP-原生态-文件上传-逻辑缺陷&函数缺陷#学习前必读:1、课前一定要明白:无文件解析安全问题上,格式解析是一......
  • 手机直播源码,前端图片压缩上传需顾及清晰度问题
    手机直播源码,前端图片压缩上传需顾及清晰度问题这里我采用element的文件上传控件来上传图片:<el-uploadclass="avatar-uploader":action="GLOBAL.serverFileUrl"name="file"drag:show-file-list="false":on-change="beforeAvatarUpload"......
  • 批量上传本地Maven仓库jar包到Nexus私服
    创建import.sh脚本,写入以下内容#!/bin/bash#copyandrunthisscripttotherootoftherepositorydirectorycontainingfiles#thisscriptattemptstoexcludeuploadingitselfexplicitlysothescriptnameisimportant#Getcommandlineparamswhilegetopt......
  • 使用 Pyqt5 GUI 页面请求 FastAPI 后端 API,实现逻辑功能
    使用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做一个登录注册页(四)本文将介绍用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做的一个登录注册页,使用邮箱接收验证码,本文介绍是前后端分离的实现方式,厚后端使用FastAPI+SQLAlchemy+Redis+Celery,你可以将PyQt5改为PySide2以获得更宽松......