

# Start uploading a file to Amazon Connect Agent Workspace
startAttachedFileUpload()

Provides a pre-signed Amazon S3 URL in response to upload a new attached file.

 **Signature** 

```
startAttachedFileUpload(data: NewAttachment): Promise<UploadableAttachment>
```

 **UploadableAttachment Properties** 


|  **Parameter**  |  **Type**  |  **Description**  | 
| --- | --- | --- | 
| associatedResourceArn | string | Amazon Connect ARN of the resource that the file is attached to. Could be a Connect Email Contact ARN or a Connect Case ARN | 
| fileId | string | ID in Connect's File record | 
| uploadUrl | string | A pre-signed S3 URL that should be used for uploading the attached file. | 
| uploadHeaders | Record<string, string> | A map of headers that should be provided in the request when uploading the attached file. | 
| uploadMethod | "PUT" | The upload request must be a PUT. | 
| fileStatus | FileStatus | The current status of the attached file. Supported values: "APPROVED", "REJECTED", "PROCESSING", "FAILED" | 

 **NewAttachment Properties** 


|  **Parameter**  |  **Type**  |  **Description**  | 
| --- | --- | --- | 
| associatedResourceArn | string | Amazon Connect ARN of the resource that the file is attached to. This could be a Connect Email Contact ARN or a Connect Case ARN | 
| fileName | string | A case-sensitive name of the attached file being uploaded. Minimum length of 1; Maximum length of 256. Supported pattern: ^\$1P\$1C\$1\$1\$1 | 
| fileSizeInBytes | number | The size of the attached file in bytes. Minimum value of 1. | 
| fileUseCaseType | "ATTACHMENT" | The use case for the file. Must be "ATTACHMENT" | 

 **Error Handling** 

When beginning the process to upload attached files, agents may encounter issues. The @amazon-connect/file library provides methods to handle common errors:
+ `isInvalidFileNameError()`: Handle errors when the name of the file is not valid
+ `isInvalidFileTypeError()`: Handle errors when the file type is not supported
+ `isInvalidFileSizeError()`: Handle errors when the size of the file is invalid
+ `isTotalFileSizeExceededError()`: Handle errors when the total size of all files (being uploaded) exceeds the limit.
+ `isTotalFileCountExceededError()`: Handle errors when the total number of files (being uploaded) exceeds the limit.

 **Usage** 

```
import { 
    isInvalidFileNameError,
    isInvalidFileTypeError,
    isInvalidFileSizeError,
    isTotalFileSizeExceededError,
    isTotalFileCountExceededError
} from "@amazon-connect/file";

/* ... */

const newAttachment: NewAttachment = {
  associatedResourceArn: sampleAssociatedResourceArn, // This could be an email contact ARN or case ARN that you are uploading the attached file to
  fileName: sampleFileName,
  fileSizeInBytes: sampleFileSizeInBytes,
  fileUseCaseType: "ATTACHMENT"
};

let uploadableAttachment: UploadableAttachment;
try {
  uploadableAttachment = await fileClient.startAttachedFileUpload(newAttachment);
} catch (e) {
  if (isInvalidFileNameError(e)) {
    // Handle InvalidFileName error
  } else if (isInvalidFileTypeError(e)) {
    // Handle InvalidFileType error
  } else if (isInvalidFileSizeError(e)) {
    // Handle InvalidFileSize error
  } else if (isTotalFileSizeExceededError(e)) {
    // Handle TotalFileSizeExceeded error
  } else if (isTotalFileCountExceededError(e)) {
    // Handle TotalFileCountExceeded error
  }
}

// Assuming startAttachedFileUpload succeeded, we upload the attached file to the pre-signed S3 URL
const { uploadUrl, uploadHeaders, uploadMethod } = uploadableAttachment;

await fetch(uploadUrl, {
  method: uploadMethod,
  headers: uploadHeaders,
  body: file, // This is the file you're uploading
});
```