chore: safe alloc mem for file (#1031)
This commit is contained in:
parent
e31928e77a
commit
6718a7afb1
|
|
@ -22,6 +22,7 @@ use database_entity::file_dto::{
|
||||||
|
|
||||||
use crate::biz::data_import::LimitedPayload;
|
use crate::biz::data_import::LimitedPayload;
|
||||||
use crate::state::AppState;
|
use crate::state::AppState;
|
||||||
|
use anyhow::anyhow;
|
||||||
use aws_sdk_s3::primitives::ByteStream;
|
use aws_sdk_s3::primitives::ByteStream;
|
||||||
use collab_importer::util::FileId;
|
use collab_importer::util::FileId;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
@ -238,7 +239,18 @@ async fn put_blob_handler(
|
||||||
let content_type = content_type.into_inner().to_string();
|
let content_type = content_type.into_inner().to_string();
|
||||||
let content = {
|
let content = {
|
||||||
let mut payload_reader = payload_to_async_read(payload);
|
let mut payload_reader = payload_to_async_read(payload);
|
||||||
let mut content = vec![0; content_length];
|
let mut content = Vec::with_capacity(content_length);
|
||||||
|
if content.try_reserve_exact(content_length).is_err() {
|
||||||
|
return Err(
|
||||||
|
AppError::Internal(anyhow!(
|
||||||
|
"Can not alloc mem for blob content size:{}",
|
||||||
|
content_length
|
||||||
|
))
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
content.resize(content_length, 0);
|
||||||
|
|
||||||
let n = payload_reader.read_exact(&mut content).await?;
|
let n = payload_reader.read_exact(&mut content).await?;
|
||||||
if n != content_length {
|
if n != content_length {
|
||||||
error!(
|
error!(
|
||||||
|
|
@ -514,7 +526,18 @@ async fn put_blob_handler_v1(
|
||||||
let content_length = content_length.into_inner().into_inner();
|
let content_length = content_length.into_inner().into_inner();
|
||||||
let content_type = content_type.into_inner().to_string();
|
let content_type = content_type.into_inner().to_string();
|
||||||
|
|
||||||
let mut content = vec![0; content_length];
|
let mut content = Vec::with_capacity(content_length);
|
||||||
|
if content.try_reserve_exact(content_length).is_err() {
|
||||||
|
return Err(
|
||||||
|
AppError::Internal(anyhow!(
|
||||||
|
"Can not alloc mem for blob content size:{}",
|
||||||
|
content_length
|
||||||
|
))
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
content.resize(content_length, 0);
|
||||||
|
|
||||||
let mut limited_payload = LimitedPayload::new(payload, content_length);
|
let mut limited_payload = LimitedPayload::new(payload, content_length);
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
while let Some(bytes) = limited_payload.next().await {
|
while let Some(bytes) = limited_payload.next().await {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue