소스 검색

create file upload example

Evan Almloff 2 년 전
부모
커밋
b0a1f4773e
2개의 변경된 파일39개의 추가작업 그리고 1개의 파일을 삭제
  1. 37 0
      examples/file_upload.rs
  2. 2 1
      packages/desktop/Cargo.toml

+ 37 - 0
examples/file_upload.rs

@@ -0,0 +1,37 @@
+#![allow(non_snake_case)]
+use dioxus::prelude::*;
+
+fn main() {
+    dioxus_desktop::launch(App);
+}
+
+fn App(cx: Scope) -> Element {
+    let files_uploaded: &UseRef<Vec<String>> = use_ref(cx, Vec::new);
+
+    cx.render(rsx! {
+        input {
+            r#type: "file",
+            accept: "text/*",
+            onchange: |evt| {
+                to_owned![files_uploaded];
+                async move {
+                    println!("files uploaded: {:?}", evt);
+                    if let Some(file_engine) = &evt.files {
+                        let files = file_engine.files();
+                        for file_name in &files {
+                            if let Some(file) = file_engine.read_file_to_string(&file_name).await{
+                                files_uploaded.write().push(file);
+                            }
+                        }
+                    }
+                }
+            },
+        }
+
+        ul {
+            for file in files_uploaded.read().iter() {
+                li { "{file}" }
+            }
+        }
+    })
+}

+ 2 - 1
packages/desktop/Cargo.toml

@@ -23,12 +23,13 @@ thiserror = "1.0.30"
 log = "0.4.14"
 wry = { version = "0.27.2" }
 futures-channel = "0.3.21"
-tokio = { version = "1.16.1", features = [
+tokio = { version = "1.27", features = [
     "sync",
     "rt-multi-thread",
     "rt",
     "time",
     "macros",
+    "fs",
 ], optional = true, default-features = false }
 webbrowser = "0.8.0"
 infer = "0.11.0"