Search Results for

# Legacy UploadAttachments

UploadAttachments is the compatibility control for form-style attachment lists.

Use it when an older page expects:

- an attachment table UI
- the `Items` collection
- `AttachmentItem` event hooks
- optional custom attachment providers

## Typical markup

    <%@ Register Assembly="AjaxUploader" Namespace="CuteWebUI" TagPrefix="CuteWebUI" %>

    <CuteWebUI:UploadAttachments ID="Attachments1" runat="server"
        InsertText="Upload multiple files"
        MultipleFilesUpload="true"
        ShowQueueTable="true"
        ShowTableHeader="true"
        ShowRemoveButtons="true"
        OnFileUploaded="Attachments1_FileUploaded"
        OnAttachmentAdded="Attachments1_AttachmentAdded"
        OnAttachmentRemoveClicked="Attachments1_AttachmentRemoveClicked">
        <ValidateOption AllowedFileExtensions="pdf,doc,docx,xls,xlsx,zip" MaxSizeKB="20480" />
    </CuteWebUI:UploadAttachments>

## Typical code-behind

    protected void Attachments1_FileUploaded(object sender, CuteWebUI.UploaderEventArgs e)
    {
        litLog.Text += "<div>Uploaded: " + Server.HtmlEncode(e.FileName) + "</div>";
    }

    protected void Attachments1_AttachmentAdded(object sender, CuteWebUI.AttachmentItemEventArgs e)
    {
        e.Item.SetCustomData("category", "invoice");
    }

    protected void Attachments1_AttachmentRemoveClicked(object sender, CuteWebUI.AttachmentItemEventArgs e)
    {
        e.Behavior = CuteWebUI.AttachmentItemBehavior.AutoRemove;
    }

## Working with the collection

    foreach (CuteWebUI.AttachmentItem item in Attachments1.Items)
    {
        if (item.ShouldSave)
        {
            var targetFolder = Server.MapPath("~/App_Data/Attachments");
            System.IO.Directory.CreateDirectory(targetFolder);
            var safeFileName = System.IO.Path.GetFileName(item.FileName ?? string.Empty);
            if (string.IsNullOrEmpty(safeFileName)) continue;
            var path = System.IO.Path.Combine(targetFolder, safeFileName);
            using (var input = item.OpenStream())
            using (var output = System.IO.File.Create(path))
            {
                input.CopyTo(output);
            }
        }
    }

## Custom provider scenarios

`CustomProvider` is for pages that mix AjaxUploader temp files with records that already exist somewhere else.

The provider contract lives at IAttachmentProvider.

## Related types

- AttachmentItem
- AttachmentItemCollection
- AttachmentItemEventArgs