fix: caculate range length of range header (#252)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2024-02-05 15:08:11 +08:00 committed by GitHub
parent b422d8ea03
commit f6f944dac3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 26 additions and 18 deletions

View File

@ -486,10 +486,15 @@ fn make_response_headers(
format!(
"bytes {}-{}/{}",
range.start,
range.start + range.length,
range.start + range.length - 1,
download_task_started_response.content_length
),
);
download_task_started_response.response_header.insert(
reqwest::header::CONTENT_LENGTH.to_string(),
range.length.to_string(),
);
};
hashmap_to_hyper_header_map(&download_task_started_response.response_header)

View File

@ -134,12 +134,13 @@ impl Content {
range: Option<Range>,
) -> Result<impl AsyncRead> {
if let Some(range) = range {
let offset = max(offset, range.start);
let length = min(offset + length - 1, range.start + range.length - 1) - offset + 1;
let target_offset = max(offset, range.start);
let target_length =
min(offset + length - 1, range.start + range.length - 1) - target_offset + 1;
let mut f = File::open(self.dir.join(task_id)).await?;
f.seek(SeekFrom::Start(offset)).await?;
return Ok(f.take(length));
f.seek(SeekFrom::Start(target_offset)).await?;
return Ok(f.take(target_length));
}
let mut f = File::open(self.dir.join(task_id)).await?;

View File

@ -127,18 +127,20 @@ impl Piece {
break;
}
pieces.push(metadata::Piece {
number: number as u32,
offset,
length: piece_length,
digest: "".to_string(),
parent_id: None,
uploading_count: 0,
uploaded_count: 0,
updated_at: Utc::now().naive_utc(),
created_at: Utc::now().naive_utc(),
finished_at: None,
});
if offset + piece_length > range.start {
pieces.push(metadata::Piece {
number: number as u32,
offset,
length: piece_length,
digest: "".to_string(),
parent_id: None,
uploading_count: 0,
uploaded_count: 0,
updated_at: Utc::now().naive_utc(),
created_at: Utc::now().naive_utc(),
finished_at: None,
});
}
offset = (number + 1) * piece_length;
number += 1;

View File

@ -125,6 +125,6 @@ pub fn parse_range_header(range_header_value: &str, content_length: u64) -> Resu
))?;
let start = valid_range.start().to_owned();
let length = valid_range.end() - start;
let length = valid_range.end() - start + 1;
Ok(Range { start, length })
}