Skip to main content

forms/
forms.rs

1use std::time::Duration;
2
3use flyer::{
4    request::Request,
5    response::Response,
6    server, 
7    session::cookie::SessionCookieManager,
8    view::ViewData
9};
10
11/*
12
13TODO: Create file called index.html in views folder and paste html content below
14
15```html
16<!DOCTYPE html>
17<html lang="en">
18<head>
19  <meta charset="UTF-8">
20  <meta name="viewport" content="width=device-width, initial-scale=1.0">
21  <base href="http://127.0.0.1:9999/">
22  <title>Upload File</title>
23  <style>
24    body {
25      text-align: center !important;
26    }
27  </style>
28</head>
29<body>
30  <nav>
31    <h1>Upload File</h1>
32  </nav>
33  <hr>
34  <form method="post" action="/upload" enctype="multipart/form-data">
35    <p style="color: red;">{{ error(name="file") }}</p>
36    <p style="color: red;">{{ error_has(name="file") }}</p>
37    <p style="color: red;">{{ error_has(name="file", class="is-invalid") }}</p>
38    <input type="file" name="file" placeholder="Image">
39    <br>
40    <br>
41    <br>
42    <button type="submit">Upload File</button>
43  </form>
44</body>
45</html>
46```
47
48*/
49
50pub async fn home<'a>(_req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
51    return res.view("index.html", Some(ViewData::new()));
52}
53
54pub async fn upload<'a>(req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
55    if req.file("file").is_none() {
56        return res.with_error("file", "The file is required.")
57            .back();
58    }
59
60    req.file("file").unwrap().save("file").await.unwrap();
61    req.file("file").unwrap().save_as("storage", "file_backup").await.unwrap();
62
63    return res.redirect("/");
64}
65
66fn main() {
67    let server = server("127.0.0.1", 9999)
68        .session(SessionCookieManager::new(Duration::from_secs((60 * 60) * 2), "session_cookie_key_name", "encryption"))
69        .view("views")
70        .set_request_max_size(1024 * 100); // Max Request size 100MB
71
72    server.router().group("/", |router| {
73        router.get("/", home);
74        router.post("upload", upload);
75    });
76
77    print!("\r\n\r\nRunning server: {}\r\n\r\n", server.address());
78
79    server.listen();
80}