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    storage::{self, DEFAULT_STORAGE, local::LocalStorage},
9    view::ViewData
10};
11
12/*
13
14TODO: Create file called index.html in views folder and paste html content below
15
16```html
17<!DOCTYPE html>
18<html lang="en">
19<head>
20  <meta charset="UTF-8">
21  <meta name="viewport" content="width=device-width, initial-scale=1.0">
22  <base href="http://127.0.0.1:9999/">
23  <title>Upload File</title>
24  <style>
25    body {
26      text-align: center !important;
27    }
28  </style>
29</head>
30<body>
31  <nav>
32    <h1>Upload File</h1>
33  </nav>
34  <hr>
35  <form method="post" action="/upload" enctype="multipart/form-data">
36    <p style="color: red;">{{ error(name="file") }}</p>
37    <p style="color: red;">{{ error_has(name="file") }}</p>
38    <p style="color: red;">{{ error_has(name="file", class="is-invalid") }}</p>
39    <input type="file" name="file" placeholder="Image">
40    <br>
41    <br>
42    <br>
43    <button type="submit">Upload File</button>
44  </form>
45</body>
46</html>
47```
48
49*/
50
51pub async fn home<'a>(_req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
52    return res.view("index.html", Some(ViewData::new()));
53}
54
55#[allow(unused)]
56pub async fn upload<'a>(req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
57    if req.file("file").is_none() {
58        return res.with_error("file", "The file is required.")
59            .back();
60    }
61
62    // Save from `File` use default storage
63    let req_save_0 = req.file("file").unwrap().save("file").await.unwrap();
64    let req_backup_0 = req.file("file").unwrap().save_as("backup", "backup").await.unwrap();
65
66    println!("FROM REQUEST SAVE PATH {}", req_save_0);
67    println!("FROM REQUEST SAVE_AS {}", req_backup_0);
68
69    if let Ok(exists) = storage::exists(DEFAULT_STORAGE, &req_save_0) && exists {
70        println!("File exists: {}", req_save_0);
71    }
72
73    if let Ok(_) = storage::delete(DEFAULT_STORAGE, &req_backup_0) {
74        println!("File deleted {}", req_save_0);
75    }
76
77    // Storage helper functions
78    let req_save_1 = storage::save(DEFAULT_STORAGE, "file", req.file("file").unwrap()).unwrap();
79    let req_backup_1 = storage::save_as(DEFAULT_STORAGE, "backup", "backup_1", req.file("file").unwrap()).unwrap();
80    let exists = storage::exists(DEFAULT_STORAGE, &req_save_1).unwrap();
81    let file = storage::get(DEFAULT_STORAGE, &req_save_1).unwrap();
82    storage::delete(DEFAULT_STORAGE, &req_save_1).unwrap();
83
84    return res.redirect("/");
85}
86
87fn main() {
88    let server = server("127.0.0.1", 9999)
89        .session(SessionCookieManager::new(Duration::from_secs((60 * 60) * 2), "session_cookie_key_name", "encryption"))
90        .storage(DEFAULT_STORAGE, LocalStorage::new(Some("storage")))
91        .view("views")
92        .set_request_max_size(1024 * 100); // Max Request size 100MB
93
94    server.router().group("/", |router| {
95        router.get("/", home);
96        router.post("upload", upload);
97    });
98
99    print!("\r\n\r\nRunning server: {}\r\n\r\n", server.address());
100
101    server.listen();
102}