Skip to main content

FileConfig

Struct FileConfig 

Source
pub struct FileConfig {
Show 16 fields pub directory: String, pub delay: Duration, pub initial_delay: Duration, pub noop: bool, pub delete: bool, pub move_to: Option<String>, pub file_name: Option<String>, pub include: Option<String>, pub exclude: Option<String>, pub recursive: bool, pub file_exist: FileExistStrategy, pub temp_prefix: Option<String>, pub auto_create: bool, pub read_timeout: Duration, pub write_timeout: Duration, pub max_body_size: usize,
}
Expand description

Configuration for file component endpoints.

§Memory Limits and Stream Materialization

The file component uses a 100MB default memory limit for stream materialization (configurable via max_body_size). This limit applies when the file producer needs to materialize a stream body into bytes for writing to disk.

§Why This Limit?

This limit is designed for batch file processing scenarios with trusted input:

  • Processing moderate-sized files in batch jobs
  • Enterprise integration patterns with controlled file sizes
  • Scenarios where files are generated by trusted sources

The 100MB default balances memory safety with practical file processing needs in typical integration scenarios.

§Overriding the Limit

Adjust the limit via the maxBodySize URI parameter (in bytes):

file:/data/output?maxBodySize=524288000  // 500MB
file:/data/output?maxBodySize=1048576    // 1MB

§Behavior When Exceeded

When a file exceeds the configured max_body_size:

  • The producer returns a CamelError::ProcessorError
  • The exchange fails without writing partial data
  • No memory is exhausted - the check happens before full materialization

§Large Files and Lazy Evaluation

Important: The file consumer uses lazy stream evaluation, allowing it to handle files of any size (including multi-gigabyte files) without loading them entirely into memory. Files are streamed chunk-by-chunk as the exchange flows through the route.

The memory limit only applies when:

  • A downstream processor requires the full body (e.g., .into_bytes())
  • The producer needs to write the body to a file

For large file scenarios, consider:

  • Keeping the body as a stream throughout the route
  • Using streaming processors that don’t require full materialization
  • Adjusting max_body_size only when you control the input sources

Fields§

§directory: String§delay: Duration§initial_delay: Duration§noop: bool§delete: bool§move_to: Option<String>§file_name: Option<String>§include: Option<String>§exclude: Option<String>§recursive: bool§file_exist: FileExistStrategy§temp_prefix: Option<String>§auto_create: bool§read_timeout: Duration§write_timeout: Duration§max_body_size: usize

Implementations§

Trait Implementations§

Source§

impl Clone for FileConfig

Source§

fn clone(&self) -> FileConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FileConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more