dio icon indicating copy to clipboard operation
dio copied to clipboard

Unable to get file or file path from a MultipartFile object

Open devendrarv opened this issue 1 year ago • 3 comments

Request Statement

Hello Team,

Thank you for maintaining and enhancing the Dio library; it's an essential tool for many developers. I am using the latest version of Dio and encountered a limitation that affects my use case.

Context

I am implementing a feature that requires generating a checksum key by encrypting the entire payload during request interception. While encrypting, I must include file information (e.g., file path or file content) in the checksum generation for requests containing MultipartFile.

Current Issue

Currently, the MultipartFile class does not provide a direct way to access file information such as the file path or File object during request interception. This limitation makes it challenging to include the file content in the encryption process.

Feature Request

I kindly request the addition of a parameter or method in the MultipartFile class to access file information, such as:

The file path (if applicable). A File object (if the source file exists).

Example

final file = MultipartFile.fromFileSync('path/to/file', filename: 'example.txt');
// Access file information
print(file.filePath); // Outputs: path/to/file
print(file.file);     // Outputs: File object

Benefits

Enables comprehensive payload encryption during interception, including file content. Simplifies workflows that rely on accessing file metadata or content.

Thank you for considering this feature request. I am happy to provide additional details or talk about this more if you need them.

Solution Brainstorm

No response

devendrarv avatar Dec 26 '24 10:12 devendrarv

Hi, can i implement this feature?

krishpranav avatar Jan 16 '25 06:01 krishpranav

Some workarounds:

I did not test it myself, but are you looking for the Options.requestEncoder?

You can pass those Options to your request, which seems to let you encode the request.

Another way would be to pass the encryption logic to MultipartFile.fromStream() and probably subclass that.

YukiAttano avatar Jan 17 '25 11:01 YukiAttano

You might use the extension type to extend MultipartFile. A MultipartFile is defined as based on Stream and to be read only once.

https://dart.dev/language/extension-types

AlexV525 avatar Jan 28 '25 14:01 AlexV525