这是我的代码:
from typing import List
from fastapi import FastAPI, File, UploadFile
import asyncio
import concurrent.futures
app = FastAPI()
@app.post("/send_images")
async def update_item(
files: List[UploadFile] = File(...),
):
return {"res": len(files)}
Run Code Online (Sandbox Code Playgroud)
我向该服务器发送请求(这些特定网址仅作为示例):
import requests
import os
import json
import numpy as np
import time
import io
import httpx
import asyncio
from datetime import datetime
import pandas as pd
from random import shuffle
import pandas as pd
import urllib
import io
from PIL import Image
from matplotlib import pyplot as plt …Run Code Online (Sandbox Code Playgroud) 这个想法是从一个端点获取文件对象并将其发送到其他端点以使用它而不保存它。让我们看一下这个示例代码:
import httpx
from fastapi import Request, UploadFile, File
app = FastAPI()
client = httpx.AsyncClient()
@app.post("/endpoint/")
async def foo(request: Request, file: UploadFile = File(...))
urls = ["/some/other/endpoint", "/another/endpoint/"]
for url in urls:
response = await client.post(url) # here I need to send the file to the other endpoint
return {"bar": "baz"}
@app.post("/some/other/endpoint/")
async def baz(request: Request, file: UploadFile = File(...)): # and here to use it
# Do something with the file object
return {"file": file.filename}
@app.post("/another/endpoint/")
async def baz(request: …Run Code Online (Sandbox Code Playgroud) 我在 VirtualBox 上配置并配置了一台具有 2048 MB RAM 的 Fedora 34 虚拟机,以便在localhost:7070. 完整的应用程序源代码和依赖代码以及说明位于此处。以下是我可以制作的最小的可重现示例。
main.py
import os, pathlib
import fastapi as fast
import aiofiles
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
RESULTS_DIR = pathlib.Path('/'.join((ROOT_DIR, 'results')))
app = fast.FastAPI()
@app.post('/api')
async def upload(
request: fast.Request,
file: fast.UploadFile = fast.File(...),
filedir: str = ''):
dest = RESULTS_DIR.joinpath(filedir, file.filename)
dest.parent.mkdir(parents=True, exist_ok=True)
async with aiofiles.open(dest, 'wb') as buffer:
await file.seek(0)
contents = await file.read()
await buffer.write(contents)
return f'localhost:7070/{dest.parent.name}/{dest.name}'
Run Code Online (Sandbox Code Playgroud)
start.sh服务器应用程序
#! /bin/bash
uvicorn --host "0.0.0.0" --log-level debug …Run Code Online (Sandbox Code Playgroud) 具体来说,我希望以下示例能够正常工作:
from typing import List
from pydantic import BaseModel
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
class DataConfiguration(BaseModel):
textColumnNames: List[str]
idColumn: str
@app.post("/data")
async def data(dataConfiguration: DataConfiguration,
csvFile: UploadFile = File(...)):
pass
# read requested id and text columns from csvFile
Run Code Online (Sandbox Code Playgroud)
如果这不是 POST 请求的正确方法,请告诉我如何从 FastAPI 中上传的 CSV 文件中选择所需的列。
我是 webdev 的新手,我有这样的用例:用户向 API 发送一个大文件(例如视频文件),然后该文件需要可供其他 API 访问(可能位于不同的服务器上) )进行进一步处理。
我使用 FastAPI 作为后端,定义一个类型为 的文件参数UploadFile来接收和存储文件。但是,让其他 API 可以访问此文件的最佳方法是什么?有没有办法可以URL从保存的文件中获取公开访问权限,其他 API 可以使用哪些文件来下载该文件?