Compare commits
5 Commits
960bcb7093
...
f5af0c8711
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5af0c8711 | ||
|
|
4709e2a0ab | ||
|
|
dbceb95154 | ||
|
|
99372bce54 | ||
|
|
26dab06063 |
@@ -1,7 +1,7 @@
|
|||||||
function getFilesDataTransferItems(dataTransferItems) {
|
function getFilesDataTransferItems(dataTransferItems) {
|
||||||
function traverseFileTreePromise(item, path = "", folder) {
|
function traverseFileTreePromise(item, path = "", folder) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if (item === null) {
|
if (item === null || typeof item === 'undefined') {
|
||||||
// nothing to do
|
// nothing to do
|
||||||
} else if (item.isFile) {
|
} else if (item.isFile) {
|
||||||
item.file(file => {
|
item.file(file => {
|
||||||
@@ -28,10 +28,17 @@ function getFilesDataTransferItems(dataTransferItems) {
|
|||||||
let files = [];
|
let files = [];
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let entriesPromises = [];
|
let entriesPromises = [];
|
||||||
for (let it of dataTransferItems)
|
for (let it of dataTransferItems) {
|
||||||
|
let entry;
|
||||||
|
if (typeof it.webkitGetAsEntry === 'function') {
|
||||||
|
entry = it.webkitGetAsEntry();
|
||||||
|
} else if (typeof it.getAsEntry === 'function') {
|
||||||
|
entry = it.getAsEntry();
|
||||||
|
}
|
||||||
entriesPromises.push(
|
entriesPromises.push(
|
||||||
traverseFileTreePromise(it.webkitGetAsEntry(), "", files)
|
traverseFileTreePromise(entry, "", files)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
Promise.all(entriesPromises).then(entries => {
|
Promise.all(entriesPromises).then(entries => {
|
||||||
resolve(files);
|
resolve(files);
|
||||||
});
|
});
|
||||||
@@ -42,6 +49,34 @@ export function get_files_data_transfer_items(data_transfer_items) {
|
|||||||
return getFilesDataTransferItems(data_transfer_items);
|
return getFilesDataTransferItems(data_transfer_items);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function upload_file(file, url) {
|
function read_file(file) {
|
||||||
new Promise(resolve => console.log(file, url));
|
return new Promise((resolve, reject) => {
|
||||||
|
let reader = new FileReader();
|
||||||
|
reader.onloadend = () => {
|
||||||
|
resolve(reader.result)
|
||||||
|
};
|
||||||
|
reader.onerror = reject;
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function upload_file(file, url) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
read_file(file).then((content) => {
|
||||||
|
fetch(url, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'Content-Type': 'multipart/form-data',
|
||||||
|
},
|
||||||
|
body: new Blob([content], { type: file.type }),
|
||||||
|
}).then((resp) => {
|
||||||
|
if (resp.status >= 200 && resp.status < 300) {
|
||||||
|
resolve(resp);
|
||||||
|
} else {
|
||||||
|
reject(resp);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).catch(error => reject(error));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use crate::gallery::Grid;
|
|||||||
use crate::hooks::use_user_context;
|
use crate::hooks::use_user_context;
|
||||||
use gloo_net::http::Request;
|
use gloo_net::http::Request;
|
||||||
|
|
||||||
use js_sys::Array;
|
use js_sys::{Array, Promise};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use wasm_bindgen::{prelude::wasm_bindgen, JsCast, JsValue};
|
use wasm_bindgen::{prelude::wasm_bindgen, JsCast, JsValue};
|
||||||
use web_sys::{
|
use web_sys::{
|
||||||
@@ -76,10 +76,6 @@ pub fn home() -> Html {
|
|||||||
if let Ok(fse) = d.clone().dyn_into::<File>() {
|
if let Ok(fse) = d.clone().dyn_into::<File>() {
|
||||||
console_log!(&fse);
|
console_log!(&fse);
|
||||||
files.push(fse.clone());
|
files.push(fse.clone());
|
||||||
wasm_bindgen_futures::spawn_local(async move {
|
|
||||||
let promise = upload_file(fse, "bla".to_owned());
|
|
||||||
let _result = wasm_bindgen_futures::JsFuture::from(promise).await.unwrap();
|
|
||||||
});
|
|
||||||
} else if let Ok(a) = d.clone().dyn_into::<js_sys::Array>() {
|
} else if let Ok(a) = d.clone().dyn_into::<js_sys::Array>() {
|
||||||
for i in 0..a.length() {
|
for i in 0..a.length() {
|
||||||
let f = a.get(i);
|
let f = a.get(i);
|
||||||
@@ -108,6 +104,7 @@ pub fn home() -> Html {
|
|||||||
news.iter().for_each(|x| new_files.push(x.clone()));
|
news.iter().for_each(|x| new_files.push(x.clone()));
|
||||||
fs.iter().for_each(|x| files.push(x.clone()));
|
fs.iter().for_each(|x| files.push(x.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
let uiae: Vec<String> = files
|
let uiae: Vec<String> = files
|
||||||
.iter()
|
.iter()
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
@@ -119,8 +116,8 @@ pub fn home() -> Html {
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
console_log!("end", uiae.join("\n"));
|
console_log!("end", uiae.join("\n"));
|
||||||
let url = "/api/photos/upload";
|
|
||||||
let photos: PhotosUrlsWrapper = Request::post(url)
|
let photos: PhotosUrlsWrapper = Request::post("/api/photos/upload")
|
||||||
.json(&PhotosWrapper { photos: uiae })
|
.json(&PhotosWrapper { photos: uiae })
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.send()
|
.send()
|
||||||
@@ -130,6 +127,21 @@ pub fn home() -> Html {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
console_log!("{}", serde_json::to_string(&photos).unwrap());
|
console_log!("{}", serde_json::to_string(&photos).unwrap());
|
||||||
|
|
||||||
|
console_log!("", files.len());
|
||||||
|
|
||||||
|
let mut promises: Vec<Promise> = Vec::new();
|
||||||
|
for (file, (_, url)) in files.iter().zip(photos.photos) {
|
||||||
|
console_log!("uploading: ", &file.name(), &url);
|
||||||
|
promises.push(upload_file(file.clone(), url.clone()));
|
||||||
|
}
|
||||||
|
for promise in promises {
|
||||||
|
match wasm_bindgen_futures::JsFuture::from(promise).await {
|
||||||
|
Ok(result) => console_log!(result),
|
||||||
|
_ => console_log!("errooooor"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
console_log!("all uploaded");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user