文件上传
蝙蝠侠学会了如何使用 Robyn 实现文件上传功能,并创建了一个接口来处理文件上传。具体代码如下:
上传不带 MultiPart 表单数据的文件
为了提升性能,蝙蝠侠将应用程序扩展到了多个 CPU 核心。他使用以下代码处理文件上传:
Request
GET
/hello_world@app.post("/upload")
async def upload():
body = request.body
file = bytearray(body)
# write whatever filename
with open('test.txt', 'wb') as f:
f.write(file)
return {'message': 'success'}
上传带 MultiPart 表单数据的文件
为了进一步提升性能,蝙蝠侠继续扩展应用至多个内核,并使用以下代码处理带 MultiPart 表单数据的文件上传:
Request
GET
/hello_world
@app.post("/sync/multipart-file")
def sync_multipart_file(request: Request):
files = request.files
file_names = files.keys()
return {"file_names": list(file_names)}
文件下载
蝙蝠侠希望让用户能够从 Web 应用中下载文件。他创建了一个接口来处理文件下载,具体代码如下:
返回简单的 HTML 文件
为提升应用性能,蝙蝠侠将应用扩展到多个核心,并使用以下命令提供简单的 HTML 文件:
Request
GET
/hello_worldfrom robyn import Robyn, Request, serve_html
app = Robyn(__file__)
@app.get("/")
async def h(request: Request):
return serve_html("./index.html")
app.start(port=8080)
返回简单的 HTML 字符串
除了 HTML 文件,蝙蝠侠还希望提供简单的 HTML 字符串。为此,他使用了以下代码:
Request
GET
/hello_worldfrom robyn import Robyn, Request, html
app = Robyn(__file__)
@app.get("/")
async def h(request: Request):
html_string = "<h1>Hello World</h1>"
return html(html_string)
app.start(port=8080)
返回其他类型的文件
在成功提供 HTML 文件后,蝙蝠侠还希望能够提供其他类型的文件,如 CSS、JS 和图片。为此,他使用了以下代码:
Request
GET
/hello_worldfrom robyn import Robyn, serve_file, Request
app = Robyn(__file__)
@app.get("/")
async def h(request: Request):
return serve_file("./index.html", file_name="index.html") # file_name is optional
app.start(port=8080)
返回文件目录
在能够提供其他类型的文件后,蝙蝠侠希望能够提供文件目录,例如用于提供 React 构建目录或简单的 HTML/CSS/JS 目录。为此,他使用了以下代码:
Request
GET
/hello_worldfrom robyn import Robyn, serve_file, Request
app = Robyn(__file__)
app.serve_directory(
route="/test_dir",
directory_path=os.path.join(current_file_path, "build"),
index_file="index.html",
)
app.start(port=8080)
下一步
现在,蝙蝠侠准备好深入了解 Robyn 的高级功能。现在,他非常好奇如何处理表单数据。
