# attachment

An attachment field allows the user to upload a file to the server, or replace a file which was previously uploaded.

NOTE

The uploaded files are stored in a web-accessible folder, however their names are generated in a way which makes them mathematically impossible to guess.

Once an attachment field has a value, you can obtain a URL to the file by calling apos.attachments.url(attachment). If the file is an image, you can obtain images of any configured size by calling apos.attachments.url(attachment, { size: 'one-half' }), etc.

Attachments are most often used indirectly via apostrophe-images-widgets or apostrophe-files-widgets, which are backed by the apostrophe-images and apostrophe-files subclasses of pieces. Each of those piece types contains an attachment field and some metadata fields, making them a convenient way to reuse files.

However, you may also use attachments directly in your own schemas. Doing so means that the file will not be available via a general-purpose "media library." It will only be readily accessible as a property of your object.

This is often appropriate for resumes, job applications and other attachments relating to a specific person.

# Example

{
  type: 'attachment',
  name: 'resume',
  label: 'Resume',
  group: 'office'
}

# Settings

Property Type Default Description
name string Sets the name of the field in the database
label string Sets the label of the field that the user sees
required boolean false If true, the field is mandatory
contextual boolean false If true, it will prevent the field from appearing in a dialog box
type string Specifies the field type
readOnly boolean false If true, prevents the user from editing the field
help string Help text for the field that will appear with the field's label
htmlHelp string Help text with support for HTML markup
group string Can be set to "image" or "office" to limit the file types that can be uploaded. Other groups can be configured via the fileGroups option of the apostrophe-attachments module.
crop boolean false If true, the user may crop the attachment. Only suitable if group is images.
aspectRatio array if set to an array like [ 2, 1 ], the image must have that aspect ratio and will be autocropped if the user does not manually crop. Only suitable if group is images.
minSize array if set to an array like [ 640, 480 ], the image must have at least the specified minimum width and height. Only suitable if group is images.