File Uploads

LAST EDIT Sep 27 2021

The channel.sendImage and channel.sendFile methods make it easy to upload files.

This functionality defaults to using the Stream CDN. If you would like, you can easily change the logic to upload to your own CDN of choice.

How to upload a file or image

Copied!
  1. Send image or file to Stream using the sendImage or sendFile methods. It is recommended to also include attachment type: to ensure proper handling by front end. (e.g. image, video, url)

  2. This will return a signed URL that points to your file on the Stream CDN. If the file is an image, it will be served inline with HTTP requests, or as an attachment otherwise.

  3. Send message with URL as attachment.

Requirements for Images

Copied!
  • Stream supported image types are: image/bmp, image/gif, image/jpeg, image/png, image/webp, image/heic, image/heic-sequence, image/heif, image/heif-sequence, image/svg+xml.

    • You can set a more restrictive list for your application if needed.

  • The maximum file size is 20MB.

Requirements for Files

Copied!
  • Stream will not block any file types from uploading, however, different clients may handle different types differently or not at all.

    • You can set a more restrictive list for your application if needed.

  • The maximum file size is 20MB.

How to Allow/Block file extensions

Copied!

Stream will allow any file extension. If you want to be more restrictive for an application, this is can be set via API or by logging into your dashboard.

  • To update via the dashboard, login and go to the Chat Overview page >> Upload Configuration

  • API updates are made using UpdateAppSettings, see the App Settings page

Image resizing

Copied!

You can automatically resize an image appending query parameters to a valid image link stored on the Stream CDN.

There are four supported params - all of them are optional and can be used interchangeably:

Parameter

Type

Values

Description

w

number

Width

h

number

Height

resize

string

clip ,crop ,scale ,fill

The resizing mode

crop

string

center ,top ,bottom ,left ,right

The cropping direction during resize

Resized images will count against your stored files quota.

Access control and link expiration

Copied!

The Stream CDN URL returned during the upload contains a signature that validates the access to the file it points to. Only the members of a channel a file was uploaded to can see the attachment and its unique, signed link. Links can only be accessed with a valid signature, which also protects against enumeration attacks.

Whenever messages containing your attachments are retrieved (i.e., when querying a channel), the attachment links will contain a new, fresh signature.

A single Stream CDN URL expires after 14 days, after which its signature will stop working and the link won't be valid anymore. You can check when a link will expire by comparing the current time with the Unix timestamp in the Expires parameter of the link's query: https://us-east.stream-io-cdn.com/0000/images/foo.png?...&Expires=1602666347&...

As explained above, all operations that return messages will refresh links automatically, but if you are storing a message containing an expired link you can perform a getMessage call to retrieve fresh links for its attachments.

Using Your Own CDN

Copied!

All 5 SDKs make it easy to use your own CDN for uploads. The code examples below show how to change where files are uploaded: