Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Data Uri Laravel Package

1tomany/data-uri

Parse data URIs, base64 strings, plain text, URLs, or local files into a temporary file via an immutable value object. Auto-detect or override MIME type, set an optional display name, and the temp file is deleted automatically on destruct.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Simplification of File Handling Workflows:

    • Eliminates the need for custom logic to parse data URIs (RFC 2397), base64-encoded files, or remote URLs into temporary files. Reduces boilerplate code for file uploads, API responses, or dynamic content generation.
    • Build vs. Buy Decision: Avoids reinventing a robust URI-to-file parser, saving ~20–30% development time for file processing pipelines.
  • Enhanced User Experience for Media Uploads:

    • Preserves original filenames (via the $name parameter) and MIME types, critical for user-facing features like:
      • Rich text editors (e.g., TinyMCE, CKEditor) where users paste data URIs.
      • File upload forms where metadata (e.g., image/png) must be retained.
    • Supports embedded media in APIs (e.g., base64 images in JSON responses) without requiring client-side preprocessing.
  • Scalable Data Processing Pipelines:

    • Roadmap Integration:
      • Phase 1: Replace manual file parsing in upload handlers (e.g., Laravel HandleUploadedFileRequest).
      • Phase 2: Extend to background jobs (e.g., Laravel Queues) for async processing of data URIs (e.g., converting to permanent storage or analyzing content).
      • Phase 3: Add validation middleware to sanitize data URIs (e.g., block malicious payloads, enforce size limits).
    • Cross-Functional Synergy:
      • Enables frontend-backend sync (e.g., decode data URIs from JavaScript into Laravel for storage/analysis).
      • Supports legacy system migration by replacing hardcoded file paths with dynamic URIs (e.g., reports, templates).
  • Cost Efficiency for Ephemeral Files:

    • Auto-deletion on object destruction eliminates manual cleanup logic, reducing memory leaks and operational overhead.
    • Ideal for temporary files (e.g., processing uploads, generating thumbnails) where persistence isn’t required.

When to Consider This Package

  • Adopt When:

    • Your application frequently processes data URIs, base64-encoded files, or remote URLs (e.g., from APIs, user uploads, or third-party integrations).
    • You need temporary, self-managing files without manual cleanup (garbage collection handles deletion).
    • Your team lacks resources to build a custom URI parser with MIME type detection, filename preservation, and stream support.
    • You’re using Laravel/Symfony and want a lightweight, dependency-minimal solution (symfony/filesystem only).
    • Use cases include:
      • Media Handling: Embedded images/videos in rich text or APIs.
      • File Uploads: Preserving original filenames and metadata.
      • Dynamic Content: Generating temporary files from user-provided data.
  • Look Elsewhere If:

    • You require persistent storage (pair with Laravel’s Filesystem or Storage facade).
    • Your use case involves large binary files (>100MB) where streaming may hit memory limits (consider chunked processing or dedicated storage solutions).
    • You need advanced validation (e.g., virus scanning, custom size limits) beyond basic MIME/type checks.
    • Your stack is non-PHP (e.g., Node.js, Python) or uses frameworks with built-in URI support (e.g., Django’s FileField).
    • You require Laravel-specific integrations (e.g., FilesystemAdapter compatibility) without custom wrapping.

How to Pitch It (Stakeholders)

For Executives:

*"This package solves a common but tedious problem: efficiently converting data URIs, base64 files, or remote URLs into temporary files—automatically. For example, when a user uploads an image via a rich text editor or an API returns an embedded asset, our team currently spends hours writing custom parsing logic. This library handles that in three lines of code, with zero manual cleanup. It’s a low-risk, high-impact addition that:

  • Reduces dev time by 30%+ for file processing workflows.
  • Improves user experience by preserving filenames and MIME types.
  • Scales effortlessly for features like background jobs or validation layers. The MIT license and minimal dependencies ensure no vendor lock-in or bloat. Let’s pilot it in our upload pipeline to see the impact."*

Key Outcomes:

  • Faster delivery of media-rich features (e.g., image uploads, dynamic reports).
  • Lower maintenance costs from eliminated custom parsing logic.
  • Future-proof for APIs, background processing, and validation needs.

For Engineering Teams:

*"The 1tomany/data-uri package provides a production-ready solution for parsing data URIs, base64, and remote files into temporary files with auto-deletion. Here’s why it’s a great fit for our stack:

Core Benefits:

  • Zero Manual Cleanup: Files auto-delete when the object is garbage-collected, eliminating memory leaks.
  • Flexible Inputs: Handles data URIs (RFC 2397), HTTP/HTTPS URLs, base64, and local files—all via a single decode() method.
  • Laravel-Compatible: Works with Symfony’s filesystem and can be wrapped for Laravel’s Storage facade.
  • Metadata Preservation: Retains original filenames and MIME types (critical for user uploads).

Proposed Use Cases:

  1. Upload Handlers: Replace custom URI parsing in HandleUploadedFileRequest with DataDecoder::decode($request->file('image'), $request->file('image')->getClientOriginalName()).
  2. API Responses: Decode base64-encoded assets from frontend requests using decodeBase64().
  3. Background Jobs: Process data URIs asynchronously (e.g., convert to permanent storage or analyze content).

Integration Example:

use OneToMany\DataUri\DataDecoder;

// For a data URI from a rich text editor
$file = (new DataDecoder())->decode($dataUri, 'user-uploaded.png');
$path = $file->getPath(); // Temporary file, auto-deleted later

// For a base64-encoded image in an API payload
$file = (new DataDecoder())->decodeBase64($base64Data, 'image/png', 'profile-pic.png');

Risks & Mitigations:

  • No Laravel-Specific Features: Wrap the DataUriInterface in a custom FilesystemAdapter for seamless integration with Laravel’s Storage facade.
  • Large File Limits: Test with files >100MB; consider chunked processing if needed.
  • URL Validation: Add middleware (e.g., Guzzle) for HTTPS checks or rate limiting.

Next Steps:

  1. Spike Test: Benchmark performance against our current upload handler.
  2. Prototype: Integrate into a high-volume endpoint (e.g., image uploads).
  3. Document: Create internal guidelines for using decode() vs. decodeBase64() vs. decodeText()."*

Why Now? This package aligns with our roadmap to simplify file handling and reduce technical debt. The low-risk pilot can validate its value before wider adoption."

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
cocosmos/filament-sticky-save-bar
patrickbussmann/oauth2-apple
3brs/enterprise-security-bundle
anousss007/vigilance
supportpal/eloquent-model
ardenexal/fhir-models
laravel-at/laravel-image-sanitize
romalytar/yammi-audit-log-laravel
ardenexal/fhir-validation
arshaviras/weather-widget
laravel-chronicle/core
sunchayn/nimbus
daikazu/eloquent-salesforce-objects
unseen-codes/chat
romalytar/yammi-jobs-monitoring-laravel
kisame76/filament-db-table-state
nqxcode/laravel-lucene-search
dpfx/laravel-livewire-wizards
workos/workos-php-laravel
sofa/laravel-global-scope