file_upload.rs 1016 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. fn main() {
  4. dioxus_desktop::launch(App);
  5. }
  6. fn App(cx: Scope) -> Element {
  7. let files_uploaded: &UseRef<Vec<String>> = use_ref(cx, Vec::new);
  8. cx.render(rsx! {
  9. input {
  10. r#type: "file",
  11. accept: ".txt, .rs",
  12. multiple: true,
  13. onchange: |evt| {
  14. to_owned![files_uploaded];
  15. async move {
  16. if let Some(file_engine) = &evt.files {
  17. let files = file_engine.files();
  18. for file_name in &files {
  19. if let Some(file) = file_engine.read_file_to_string(file_name).await{
  20. files_uploaded.write().push(file);
  21. }
  22. }
  23. }
  24. }
  25. },
  26. }
  27. ul {
  28. for file in files_uploaded.read().iter() {
  29. li { "{file}" }
  30. }
  31. }
  32. })
  33. }