Skip to content

Upload

Rules

Basic Example

js
const rule = {
    type: "upload",
    field: "pic",
    title: "Carousel Images",
    value: [
        'http://img1.touxiang.cn/uploads/20131030/30-075657_191.jpg',
        'http://img1.touxiang.cn/uploads/20131030/30-075657_191.jpg'
        ],
    props: {
        action: "/upload.php",
        limit: 2,
        onSuccess: function (file) {
            file.url = file.response.url;
        }
    },
}

Props Configuration Examples

Image Upload

js
const rule = {
    type: "upload",
    field: "image",
    title: "Product Image",
    value: [],
    props: {
        action: "/upload.php",
        theme: "image",
        accept: "image/*",
        max: 5,
        multiple: true,
        onSuccess: function (file) {
            file.url = file.response.url;
        }
    },
}

File Upload

js
const rule = {
    type: "upload",
    field: "file",
    title: "Attachment Upload",
    value: [],
    props: {
        action: "/upload.php",
        theme: "file",
        accept: ".pdf,.doc,.docx",
        max: 3,
        multiple: true,
        onSuccess: function (file) {
            file.url = file.response.url;
        }
    },
}

Limit File Size

js
const rule = {
    type: "upload",
    field: "file",
    title: "File Upload",
    value: [],
    props: {
        action: "/upload.php",
        accept: "image/*",
        onBeforeUpload: function (file) {
            if (file.size > 2 * 1024 * 1024) {
                return false; // Limit 2MB
            }
            return true;
        },
        onSuccess: function (file) {
            file.url = file.response.url;
        }
    },
}

Events Examples

Listen to Upload Events

js
const rule = {
    type: "upload",
    field: "file",
    title: "File Upload",
    value: [],
    props: {
        action: "/upload.php",
        onSuccess: function (file) {
            file.url = file.response.url;
        },
    },
    on: {
        change: (fileList, context) => {
            console.log('File status changed:', context.file.status);
        },
        fail: (file) => {
            console.log('Upload failed:', file);
        },
        progress: (file) => {
            console.log('Upload progress:', file.percent);
        },
    },
}

Update Other Fields

js
const rule = [
    {
        type: "upload",
        field: "cover",
        title: "Cover Image",
        value: [],
        props: {
            action: "/upload.php",
            theme: "image",
            accept: "image/*",
            max: 1,
            onSuccess: function (file) {
                file.url = file.response.url;
            },
        },
        inject: true,
        on: {
            change: ($inject, fileList, context) => {
                // Auto-fill image URL field after successful upload
                if (context.file.status === 'success' && context.file.url) {
                    $inject.api.setValue('coverUrl', context.file.url);
                }
            },
        },
    },
    {
        type: "input",
        field: "coverUrl",
        title: "Cover URL",
        props: {
            disabled: true,
        },
    },
]

Complete configuration items: TDesign_Upload

value :Array | String

Note

After a successful upload, assign the URL from the response to file.url in the onSuccess callback. Otherwise, the form won't receive the component data.

FormCreate is an open-source project released under the MIT License. Free for personal and commercial use.