Skip to content

Models and exceptions

Custom model and table

php
namespace App\Models;

use Mattmy\FileMagic\Models\StoredFile as BaseStoredFile;

final class StoredFile extends BaseStoredFile {}
php
'model' => App\Models\StoredFile::class,
'table' => 'assets',

The custom model must extend the package model. FileMagic uses it consistently for storage, lookup, and deletion, including its connection, table, and primary key. Batch record deletion uses an unscoped bulk query because FileMagic has already resolved explicit keys. It therefore bypasses global scopes and does not dispatch per-model Eloquent deleting or deleted events.

Configure a custom table before publishing the migration. If already deployed, create a new migration rather than editing migration history.

Exceptions

All exceptions extend FileMagicException.

ExceptionMeaning
InvalidFileSourceInvalid upload, path, or stream
InvalidBase64Invalid Base64 or Data URI
InvalidDocumentDataInvalid UTF-8, JSON data, or CSV rows
InvalidRemoteOptionsInvalid timeout, redirect, host, or port option
InvalidRemoteUrlMalformed or unsupported remote URL
RemoteAccessDeniedScheme, host, port, DNS, IP, or network policy rejected the URL
RemoteDownloadUnavailablePHP ext-curl is unavailable for fromUrl()
RemoteDownloadFailedDNS, TLS, connection, redirect, HTTP, or temporary download failure
InvalidFileNameUnsafe or reserved name
InvalidStoragePathUnsafe directory
InvalidFileTargetInvalid ID, UUID, model, array, or Collection target
InvalidStoredFileModelConfigured model does not extend the package StoredFile
FileTooLargeByte limit exceeded
DisallowedMimeTypeMIME type rejected
FileWriteFailedStorage write, collision, overwrite backup, or deletion failure
FileRecordFailedDatabase persistence failure
FileRecoveryFailedAn overwrite failed and the original object could not be restored
PartialFileDeletionOnly confirmed missing objects and their records were deleted
FileNotFoundNo record matched, or physical content or stream is unavailable
ImageProcessingUnavailableMissing image dependency or driver while processing a supported image
ZipCreationUnavailablePHP ext-zip is unavailable
ZipCreationFailedTemporary ZIP creation or finalization failed
ZipLimitExceededZIP file-count or uncompressed-size limit exceeded

Handle errors in the application layer:

php
use Mattmy\FileMagic\Exceptions\FileMagicException;

try {
    $file = FileMagic::fromUpload($uploadedFile)->store();
} catch (FileMagicException $exception) {
    report($exception);

    return back()->withErrors(['file' => 'The file could not be stored.']);
}

The package deliberately does not choose HTTP status codes or response formats.

Last updated:

Released under the MIT License.