MS Excel具有以下观察到的MIME类型:
application/vnd.ms-excel (官方)application/msexcelapplication/x-msexcelapplication/x-ms-excelapplication/x-excelapplication/x-dos_ms_excelapplication/xlsapplication/x-xlsapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet (XLSX)是否有任何一种适用于所有版本的类型?如果没有,我们是否需要response.setContentType()单独设置这些mime类型中的每一个?
此外,我们在应用程序中使用文件流来显示文档(不仅仅是excel - 任何类型的文档).这样做,如果用户选择保存文件,我们如何保留文件名 - 目前,呈现文件的servlet名称显示为默认名称.
我有一个简单的文本文件,我想在任何锚标记链接上下载该文件.
但是,当我点击链接txt文件显示我但没有下载.
我试过这段代码
<html>
<head>
<title>File</title>
</head>
<body>
<a href="test.txt">Click here</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在查看这个,我看到了在 API 中上传的功能?https://fastapi.tiangolo.com/tutorial/request-files/没有选择 dl .. 我错过了什么吗?我希望为文件下载站点创建一个 api。我应该使用不同的api吗?
from typing import List
from fastapi import FastAPI, Query
app = FastAPI()
PATH "some/path"
@app.get("/shows/")
def get_items(q: List[str] = Query(None)):
'''
Pass path to function.
Returns folders and files.
'''
results = {}
query_items = {"q": q}
entry = PATH + "/".join(query_items["q"]) + "/"
dirs = os.listdir(entry)
results["folders"] = [val for val in dirs if os.path.isdir(entry+val)]
results["files"] = [val for val in dirs if os.path.isfile(entry+val)]
results["path_vars"] = query_items["q"]
return results
Run Code Online (Sandbox Code Playgroud)
这是python获取路径的文件和目录的示例代码,您可以将路径作为列表返回,并在循环中添加新条目以深入了解文件树。传递文件名应该会触发下载功能,但我似乎无法启动下载功能。
我正在尝试从 FastAPI 后端下载一个大文件 ( .tar.gz)。在服务器端,我只是验证文件路径,然后Starlette.FileResponse返回整个文件\xe2\x80\x94,就像我在 StackOverflow 上的许多相关问题中看到的那样。
服务器端:
\nreturn FileResponse(path=file_name, media_type=\'application/octet-stream\', filename=file_name)\nRun Code Online (Sandbox Code Playgroud)\n之后,我收到以下错误:
\n File "/usr/local/lib/python3.10/dist-packages/fastapi/routing.py", line 149, in serialize_response\n return jsonable_encoder(response_content)\n File "/usr/local/lib/python3.10/dist-packages/fastapi/encoders.py", line 130, in jsonable_encoder\n return ENCODERS_BY_TYPE[type(obj)](obj)\n File "pydantic/json.py", line 52, in pydantic.json.lambda\nUnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0x8b in position 1: invalid start byte\nRun Code Online (Sandbox Code Playgroud)\n我也尝试使用StreamingResponse,但得到了同样的错误。还有其他方法可以做到吗?
我的代码中的StreamingResponse:
File "/usr/local/lib/python3.10/dist-packages/fastapi/routing.py", line 149, in serialize_response\n return jsonable_encoder(response_content)\n File "/usr/local/lib/python3.10/dist-packages/fastapi/encoders.py", line 130, in jsonable_encoder\n return ENCODERS_BY_TYPE[type(obj)](obj)\n File …Run Code Online (Sandbox Code Playgroud) 我有一个 FastAPIGET端点,它返回大量 JSON 数据(约 160,000 行和 45 列)。毫不奇怪,使用返回数据非常json.dumps()慢。我首先使用文件中的数据读取数据json.loads(),并根据输入的参数对其进行过滤。有没有比使用更快的方法将数据返回给用户return data?以目前的状态,需要将近一分钟的时间。
我的代码目前如下所示:
# helper function to parse parquet file (where data is stored)
def parse_parquet(file_path):
df = pd.read_parquet(file_path)
result = df.to_json(orient = 'records')
parsed = json.loads(result)
return parsed
@app.get('/endpoint')
# has several more parameters
async def some_function(year = int | None = None, id = str | None = None):
if year is None:
data = parse_parquet(f'path/{year}_data.parquet')
# no year
if year is …Run Code Online (Sandbox Code Playgroud) 我将使用 FastAPI 创建一个 API HTML,使用pdfkit. 但是,它将文件保存到我的本地磁盘。当我在线提供此API后,用户如何将该PDF文件下载到他们的计算机上?
from typing import Optional
from fastapi import FastAPI
import pdfkit
app = FastAPI()
@app.post("/htmltopdf/{url}")
def convert_url(url:str):
pdfkit.from_url(url, 'converted.pdf')
Run Code Online (Sandbox Code Playgroud) 我发现如何使用 FastAPI 将 numpy 数组作为图像返回?然而,我仍然在努力展示图像,它看起来只是一个白色的方块。
io.BytesIO我像这样读入一个数组:
def iterarray(array):
output = io.BytesIO()
np.savez(output, array)
yield output.get_value()
Run Code Online (Sandbox Code Playgroud)
在我的端点中,我的回报是StreamingResponse(iterarray(), media_type='application/octet-stream')
当我留空media_type以推断时,会下载一个 zip 文件。
如何将数组显示为图像?
我有一个简单的 React Ui,它应该从中获取 json 文件localhost:8000/todo并在localhost:3000. 这是所需的输出:

所以,这两行是“读一本书”。和“骑自行车环城”。没有显示。这两行应该来自localhost:8000/todo类型JSON信息。我觉得我可以从 获取数据localhost:8000/todo,但我不知道如何在 中显示它们localhost:3000,这是我的输出。
这是我为此提供的功能:
export default function Todos() {
const [todos, setTodos] = useState([])
const fetchTodos = async () => {
const response = await fetch("http://localhost:8000/todo")
const todos = await response.json()
setTodos(todos.data)
}
useEffect(() => {
fetchTodos()
}, [])
return (
<TodosContext.Provider value={{todos, fetchTodos}}>
<AddTodo />
<Stack spacing={5}>
{todos.map((todo) => (
<b>{todo.item}</b>
))}
</Stack>
</TodosContext.Provider>
)
}
Run Code Online (Sandbox Code Playgroud)
{todos.item}是应该打印项目的部分,但它没有!
以下是 …