вот тут уязвимость, можно сделать sql-injectiondiesel::dsl::sql(&format!(r#""{}"{}"#, key, value))
Ну, глупо не глупо, а пособеситься охота. Что ж, придется химичить)
Если правильно понял, то файлы d.ts в проекте, где у меня нет файлов js, не нужны?
const file = document.querySelector('input[type="file"]').files[0];
const totalBytes = file.size;
let bytesUploaded = 0;
await fetch("<upload file url>", {
method: "PUT",
headers: {
"Content-Type": "<file content type>"
},
body: file.stream().pipeThrough(new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk);
bytesUploaded += chunk.byteLength;
// report progress
},
flush(controller) {
// report finish
},
})),
duplex: "half", // нужно так как у нас не ReadableStream а TransformStream в body
});
Ванильный js это XMLHttpRequest. а fetch это высокоуровневая обертка.
Это плохо, потому что только он позволяет отслеживать прогресс загрузки
use std::{fs::File, io::Write, mem, path::PathBuf, sync::mpsc, thread};
fn main() {
let (tx, rx) = mpsc::channel::<Vec<_>>();
let handle = thread::spawn(move || {
let path = PathBuf::from("...");
let mut output = File::create(&path).unwrap_or_else(|e| {
panic!(
"failed to create file with path {:?}: {:?}",
path.as_os_str(),
e
)
});
loop {
let Ok(buf) = rx.recv() else {
break;
};
output.write(&buf).expect("failed to write");
}
});
let big_buffer = get_big_buffer_input();
let mut buf = Vec::with_capacity(1024);
for byte in big_buffer {
buf.push(byte);
if buf.len() == buf.capacity() {
let buf = mem::take(&mut buf);
tx.send(buf).expect("failed to send buf");
}
}
handle.join().unwrap();
}
fn get_big_buffer_input() -> impl Iterator<Item = u8> {
todo!()
}