--- layout: default title: The Data Uri Path component redirect_from: - /5.0/components/data-path/ --- # Data URI Path The library provides a `DataPath` class to ease complex path manipulation on a Data URI object. This URI component object exposes : - the [package common API](/components/1.0/api/) - the [path common API](/components/1.0/path) but also provide specific methods to work with Data URI paths. ## Instantiation using the constructor ~~~php submitted string is normalized to be RFC3986 compliant.

If the submitted value is not valid a League\Uri\Components\Exception exception is thrown.

The `League\Uri\Components\Exception` extends PHP's SPL `InvalidArgumentException`. ## Instantiation using a file path ~~~php getMediaType(); //returns 'text/plain;charset=us-ascii' echo $path->getMimeType(); //returns 'text/plain' echo $path->getParameters(); //returns 'charset=us-ascii' echo $path->getData(); //returns 'Hello%20World%21' $path->isBinaryData(); //returns false $binary_path = DataPath::createFromPath('path/to/my/png/image.png'); $binary_path->isBinaryData(); //returns true ~~~ ## Modifying the path properties ### Update the Data URI parameters Since we are dealing with a data and not just a URI, the only property that can be modified are its optional parameters. To set new parameters you should use the `withParameters` method: ~~~php withParameters('charset=utf-8'); echo $newPath; //returns 'text/plain;charset=utf-8,Hello%20World%21' ~~~

Of note the data should be urlencoded if needed.

### Transcode the data between its binary and ascii representation Another manipulation is to transcode the data from ASCII to is base64 encoded (or binary) version. If no conversion is possible the former object is returned otherwise a new valid data uri object is created. ~~~php isBinaryData(); // return false; $newPath = $path->toBinary(); $newPath->isBinaryData(); //return true; $newPath->toAscii() == $path; //return true; ~~~ ## Saving the data path Since the path can be interpreted as a file, it is possible to save it to a specified path using the dedicated `save` method. This method accepts two parameters: - the file path; - the open mode (à la PHP `fopen`); By default the open mode is set to `w`. If for any reason the file is not accessible a `RuntimeException` will be thrown. The method returns the `SplFileObject` object used to save the data-uri data for further analysis/manipulation if you want. ~~~php save('path/where/to/save/my/image.png'); //$file is a SplFileObject which point to the newly created file; ~~~