1tomany / data-uri
A simple, low dependency library to parse and decode data URIs defined in RFC 2397
Requires
- php: >=8.5
- ext-ctype: *
- ext-fileinfo: *
- ext-mbstring: *
- symfony/config: ^7.2|^8.0|^8.1
- symfony/console: ^7.2|^8.0|^8.1
- symfony/dependency-injection: ^7.2|^8.0|^8.1
- symfony/filesystem: ^7.2|^8.0|^8.1
- symfony/http-kernel: ^7.2|^8.0|^8.1
- symfony/serializer: ^7.2|^8.0|^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- mikey179/vfsstream: ^1.6
- phpstan/phpstan: ^2.1.55
- phpunit/phpunit: ^13.1.11
Suggests
None
Provides
None
Conflicts
None
Replaces
- 1tomany/data-uri-bundle: *
- dev-master
- v7.0.4
- v7.0.3
- v7.0.2
- v7.0.1
- v7.0.0
- v6.0.10
- v6.0.9
- v6.0.8
- v6.0.7
- v6.0.6
- v6.0.5
- v6.0.4
- v6.0.3
- v6.0.2
- v6.0.1
- v6.0.0
- v5.0.5
- v5.0.4
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- v4.5.1
- v4.5.0
- v4.4.5
- v4.4.4
- v4.4.3
- v4.4.2
- v4.4.1
- v4.4.0
- v4.3.0
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.0
- v3.0.0
- v2.6.0
- v2.5.0
- v2.4.1
- v2.4.0
- v2.3.1
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.0
- v1.6.0
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.0
- dev-uri-72.1
- dev-fs-72.1
- dev-uri-72
- dev-uri-71
- dev-uri-68
- dev-uri-68.1
- dev-uri-60-security
This package is auto-updated.
Last update: 2026-10-23 06:14:43 UTC
README
This simple library allows you to easily convert a wide variety of data into a temporary file represented by a lightweight immutable value object. It also includes Symfony bundle integration for autowiring, serialization, and console usage.
Installation
composer require 1tomany/data-uri
API Overview
The four methods exposed by this library are:
OneToMany\DataUri\DataDecoder::decode()OneToMany\DataUri\DataDecoder::decodeBase64()OneToMany\DataUri\DataDecoder::decodeText()OneToMany\DataUri\DataDecoder::fromMarkdown()
Each method returns a OneToMany\DataUri\Record\TemporaryFile value object which implements the interface OneToMany\DataUri\Contract\Record\TemporaryFileInterface. By default, the TemporaryFile object will delete any filesystem resources it knows about when it is explicitly destructed or garbage collected.
The DataDecoder::decode() method is the most versatile as it allows for a wide variety of inputs:
- A data URI defined in RFC2397
- A file from an accessible filesystem
- A public HTTP or HTTPS URL
DataDecoder::decode()
Use this method when the type or source of data is unknown. This method has the following arguments:
-
mixed $dataThe data, file, or URL to decode -
string|FileType|null $type = nullThe MIME type of the temporary fileIf empty, the type will be determined using either the file's extension or the
mime_content_type()function. You may want to explicitly provide this argument when the file can be multiple types. For example,mime_content_type()may returntext/plainfor Markdown files, which is correct, however, you may wish to use the more specific MIME typetext/markdown. -
?string $name = nullThe name for the temporary fileThis is useful for handling file uploads where the original filename is preferred over the random one PHP assigns. A randomly generated name will be used if this is empty and a name cannot be resolved.
Inside DataDecoder::decode()
Under the hood, the decode() method uses the fopen() and stream_get_contents() functions provided by the PHP standard library, which means the data passed to it can be any supported stream.
DataDecoder::decodeBase64()
Use this method when the data is known to be base64 encoded but NOT encoded as a data URI. This method has the following arguments:
?string $dataThe base64 encoded stringstring|FileType $typeThe MIME type of the data?string $name = nullSee thedecode()method
DataDecoder::decodeText()
Use this method when the data is known to be plaintext. This method has the following arguments:
?string $textThe plaintext stringstring|FileType $type = FileType::TxtThe MIME type of the text?string $name = nullSee thedecode()method
DataDecoder::fromMarkdown()
Use this method when the data is known to be Markdown. This method has the following arguments:
?string $markdownThe Markdown string?string $name = nullSee thedecode()method
Symfony Integration
The package includes OneToMany\DataUri\DataUriBundle. Symfony Flex enables it automatically after installation, and OneToMany\DataUri\DataDecoder can then be autowired without additional service configuration:
<?php use OneToMany\DataUri\DataDecoder; final readonly class DecodeData { public function __construct( private DataDecoder $dataDecoder, ) { } }
No bundle configuration is necessary. The bundle also:
- registers
OneToMany\DataUri\Serializer\TemporaryFileNormalizerwith Symfony's Serializer component - provides the
onetomany:data-uri:encode-fileconsole command for converting a file to a base64-encoded data URI
The framework-independent API remains available by constructing DataDecoder directly.
Examples
Run and inspect the decode.php file for examples on how to use the DataDecoder::decode() method.
php examples/decode.php [--all]
Credits
License
The MIT License