fix: caculate range length of range header (#252)
Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
parent
b422d8ea03
commit
f6f944dac3
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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?;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 })
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue