feat(upload): read fixed-size upload prefix

This commit is contained in:
Stanislav N Mikhailov
2026-08-11 21:39:50 +03:00
parent 46f2721570
commit 9bc62acbc3
3 changed files with 44 additions and 16 deletions
+1 -1
View File
@@ -117,7 +117,7 @@ impl Connection {
}
// Читаем остальную часть буфера от 1 до конца общего заголовка
self.stream.read_exact(&mut buffer[1..=HEADER_SIZE]).await?;
self.stream.read_exact(&mut buffer[1..HEADER_SIZE]).await?;
//Парсим скачанный заголовок через nocloud_core::protocol parse_header
let header =
+8 -8
View File
@@ -80,14 +80,14 @@ pub struct UploadMetadata {
}
```
- [ ] Добавить геттеры для `file_size` и `file_name`.
- [ ] Добавить константу максимальной длины имени:
- [✔] Добавить геттеры для `file_size` и `file_name`.
- [✔] Добавить константу максимальной длины имени:
```rust
MAX_FILENAME_SIZE
MAX_RELATIVE_PATH_BYTES
```
- [ ] Пока не добавлять в структуру содержимое файла.
- [✔] Пока не добавлять в структуру содержимое файла.
### 5. Прочитать фиксированную часть метаданных
@@ -98,10 +98,10 @@ file_size: 8 байт
name_size: 2 байта
```
- [ ] В `upload::handle()` создать буфер размером 10 байт.
- [ ] Прочитать в него ровно 10 байт через `read_exact()`.
- [ ] Пока вывести полученные байты.
- [ ] Проверить обрыв соединения внутри этих десяти байт.
- [✔] В `upload::handle()` создать буфер размером 10 байт.
- [✔] Прочитать в него ровно 10 байт через `read_exact()`.
- [✔] Пока вывести полученные байты.
- [✔] Проверить обрыв соединения внутри этих десяти байт.
Ожидаемый результат:
+31 -3
View File
@@ -2,15 +2,43 @@ use tokio::{io::{self, AsyncReadExt}, net::TcpStream, stream};
use crate::protocol::Header;
const UPLOAD_PREFIX_SIZE: usize = 10; //Размер префикса в UPLOAD
pub const MAX_RELATIVE_PATH_BYTES: usize = 128 * 1024; //Размер пути с именем
struct UploadMetadata {
file_size: u64,
path_size: u64,
file_name: String,
}
impl UploadMetadata {
pub async fn handle(stream: &mut TcpStream, header: Header) -> io::Result<()> {
println!("Обработчик UPLOAD получил заголовок: {header:?}");
let filename_read=stream.read(&mut )
let mut prefix_buffer = [0_u8; UPLOAD_PREFIX_SIZE];
stream.read_exact(&mut buffer).await?;
println!(
"Получены {UPLOAD_PREFIX_SIZE} байт метаданных UPLOAD: {buffer:?}"
);
Ok(())
}
impl UploadMetadata {
pub(crate) fn new(
file_size: u64,
relative_path: String,
) -> Self {
Self {
file_size,
relative_path,
}
}
pub fn file_size(&self) -> u64 {
self.file_size
}
pub fn relative_path(&self) -> &str {
&self.relative_path
}
}