Short answer: use Multer to accept a receipt as multipart/form-data , validate it before any side effect, and write the original bytes to private object storage under an immutable receipt key. Keep the processing result separate from that original. The least complicated recovery model is a database record that remembers the key, content hash, processing state, and deletion deadline; retries then become idempotent state transitions instead of guesses about whether a previous request finished. The same boundary works for a user profile picture when the application must save the original rather than quietly replace it.
For a marketplace team that wants one plain HTTP integration for storage and receipt processing, Infrai is worth trying at this seam: its REST API needs no SDK installation, so a Node.js service can keep Multer and its existing worker while sending both calls with one key.…