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.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-69
- dev-uri-68
- dev-uri-68.1
- dev-uri-60-security
This package is auto-updated.
Last update: 2026-09-16 20:11:17 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 three methods exposed by this library are:
OneToMany\DataUri\DataDecoder::decode()OneToMany\DataUri\DataDecoder::decodeBase64()OneToMany\DataUri\DataDecoder::decodeText()
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()
The DataDecoder::decode() method has the following arguments:
mixed $dataThe data, file, or URL to decode.string|FileType|null $type = nullThe MIME type of the temporary file. If empty, the type will be determined using either the file's extension or themime_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|null $name = nullThe name for the temporary file. This 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, DataDecoder::decode() uses the fopen() and stream_get_contents() functions, which means the data passed to it can be any stream that PHP supports.
DataDecoder::decodeBase64()
This method is to be used when the data is known to be base64 encoded but NOT encoded as a data URI.
The DataDecoder::decodeBase64() method has the following parameters:
string $dataThe base64 encoded string.string|FileType $typeThe MIME type of the data.string|null $name = nullSeeDataDecoder::decode().
DataDecoder::decodeText()
This method is to be used when the data is known to be plaintext.
The DataDecoder::decodeText() method has the following arguments:
string $textThe plaintext string.string|FileType $type = FileType::TxtThe MIME type of the text.string|null $name = nullSeeDataDecoder::decode().
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