Loading...
Loading...
Implement file upload preview components in Umbraco backoffice using official docs
npx skill4agent add umbraco/umbraco-cms-backoffice-skills umbraco-file-upload-previewumbraco-umbraco-elementexport const manifests: Array<UmbExtensionManifest> = [
{
type: 'fileUploadPreview',
alias: 'My.FileUploadPreview.Custom',
name: 'Custom File Upload Preview',
weight: 100,
element: () => import('./my-file-preview.element.js'),
forMimeTypes: ['application/pdf', 'application/x-pdf'],
},
];import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbFileUploadPreviewElement } from '@umbraco-cms/backoffice/media';
@customElement('my-file-preview')
export class MyFilePreviewElement extends UmbLitElement implements UmbFileUploadPreviewElement {
@property({ type: Object })
file?: File;
@state()
private _previewUrl?: string;
override updated(changedProperties: Map<string, unknown>) {
if (changedProperties.has('file') && this.file) {
this._previewUrl = URL.createObjectURL(this.file);
}
}
override disconnectedCallback() {
super.disconnectedCallback();
if (this._previewUrl) {
URL.revokeObjectURL(this._previewUrl);
}
}
override render() {
if (!this.file) return html``;
return html`
<div class="preview-container">
<uui-icon name="icon-document"></uui-icon>
<span>${this.file.name}</span>
</div>
`;
}
}
export default MyFilePreviewElement;interface ManifestFileUploadPreview extends ManifestElement<UmbFileUploadPreviewElement> {
type: 'fileUploadPreview';
forMimeTypes: string | Array<string>; // e.g., 'image/*', ['image/png', 'image/jpeg']
}
interface UmbFileUploadPreviewElement {
file?: File;
}image/*video/*audio/*application/pdf*/*