perf(desktop): stream drag-upload and improve transfer status UX
This commit is contained in:
@@ -620,8 +620,6 @@ async fn api_upload_file(
|
||||
.and_then(|name| name.to_str())
|
||||
.map(|name| name.to_string())
|
||||
.ok_or_else(|| "无法识别文件名".to_string())?;
|
||||
|
||||
let file_bytes = fs::read(&source_path).map_err(|err| format!("读取文件失败: {}", err))?;
|
||||
let normalized_target = if target_path.trim().is_empty() {
|
||||
"/".to_string()
|
||||
} else {
|
||||
@@ -634,9 +632,15 @@ async fn api_upload_file(
|
||||
return Err("API 地址不能为空".to_string());
|
||||
}
|
||||
|
||||
// 使用流式 multipart 上传,避免大文件整块读入内存导致占用暴涨。
|
||||
let file_part = reqwest::multipart::Part::file(&source_path)
|
||||
.await
|
||||
.map_err(|err| format!("读取文件失败: {}", err))?
|
||||
.file_name(file_name);
|
||||
|
||||
let multipart = reqwest::multipart::Form::new()
|
||||
.text("path", normalized_target)
|
||||
.part("file", reqwest::multipart::Part::bytes(file_bytes).file_name(file_name));
|
||||
.part("file", file_part);
|
||||
|
||||
let mut request = state
|
||||
.client
|
||||
|
||||
Reference in New Issue
Block a user