On this page

Send files

Attach files to messages to share information or improve collaboration.

Chat SDK supports multiple file attachments per message (unlike the JavaScript SDK). Each file must be 5 MB or less. Files upload sequentially, so consider implementing a progress indicator for better UX.

Requires File Sharing

Enable File Sharing in the Admin Portal and configure storage region and retention. Align file retention with Message Persistence retention.

Send files

Attach files to a draft message and publish using send().

Method signature

To add files, you must add elements to the files field (MutableList<InputFile>) of a MessageDraft object.

Sample code

Attach two files of different formats to a text message.

1// create a draft message
2val messageDraft = channel.createMessageDraft(isTypingIndicatorTriggered = channel.type != ChannelType.PUBLIC)
3
4// add a listener
5val listener = { elements: List<MessageElement>, suggestedMentions: PNFuture<List<SuggestedMention>> ->
6 updateUI(elements) // updateUI is your own function for updating UI
7 suggestedMentions.async { result ->
8 result.onSuccess { updateSuggestions(it) } // updateSuggestions is your own function for displaying suggestions
9 }
10 }
11messageDraft.addChangeListener(listener)
12
13// work on editing message with messageDraft.update(text)
14
15// attach files
show all 21 lines

Get all message files

files returns all files attached to a message.

Field signature

This field has the following signature:

1val files: List<File>

Sample code

List all files attached to the last message on the support channel.

1val channel: Channel
2// ...
3
4// get the last message from the channel’s history
5channel.getHistory(count = 1).async { historyResult ->
6 historyResult.onSuccess { historyResponse ->
7 val lastMessage = historyResponse.messages.firstOrNull()
8 if (lastMessage != null) {
9 // access the files property of the last message
10 val files = lastMessage.files
11
12 if (files.isNotEmpty()) {
13 println("The last message contains the following files:")
14 files.forEach { file ->
15 println("File Name: ${file.name}, File Type: ${file.type}")
show all 27 lines

Get all channel files

getFiles() returns all files attached to messages on a channel.

Method signature

This method takes the following parameters:

1channel.getFiles(
2 limit: Int?,
3 next: String?
4): PNFuture<GetFilesResult>

Input

* required
ParameterDescription
limit
Type: Int
Default:
100
Number of files to return.
next
Type: String
Default:
n/a
String token to get the next batch of files.

Output

ParameterDescription
PNFuture<GetFilesResult>
Type: object
Returned object containing these fields: files, next, and total.
 → files
Type: Collection<GetFileItem>
Array containing file details.
 → next
Type: String
Random string returned from the server, indicating a specific position in a data set. Used for forward pagination, it fetches the next page, allowing you to continue from where you left off.
 → total
Type: Int
Total number of files.

GetFileItem contains the following properties:

ParameterDescription
name
Type: String
Name of the file, like error-1.jpg.
id
Type: String
Unique identifier assigned to the file by PubNub, like 736499374.
url
Type: String
File's direct downloadable URL, like https://ps.pndsn.com/v1/files/demo/channels/support/files/736499374/error-1.jpg.

Sample code

List all files published on the support channel.

1val channel: Channel
2
3fun fetchFiles(channel: Channel, next: String?) {
4 channel.getFiles(limit = 100, next = next).async { result ->
5 result.onSuccess { filesResult ->
6 filesResult.files.forEach { file ->
7 println("File name: ${file.name}, File URL: ${file.url}")
8 }
9
10 // Check if there is another page of results
11 if (filesResult.next != null) {
12 fetchFiles(channel, filesResult.next)
13 }
14 }.onFailure {
15 // handle error
show all 23 lines

Delete files

deleteFile() removes files from PubNub storage.

Endpoint limitation

After deleting a file, you cannot identify which historical messages contained it.

Method signature

This method takes the following parameters:

1channel.deleteFile(
2 id: String,
3 name: String
4): PNFuture<PNDeleteFileResult>

Input

* required
ParameterDescription
id *
Type: String
Default:
n/a
Unique identifier assigned to the file by PubNub.
name *
Type: String
Default:
n/a
Name of the file.

Output

TypeDescription
PNFuture<PNDeleteFileResult>
Status code of the response.

Sample code

Remove a file named error-screenshot.png from the support channel.

1val channel: Channel
2// ...
3
4// delete the file named "error-screenshot.png" from the "support" channel
5val fileId = "file-id-to-delete" // Replace this with the actual file ID
6val fileName = "error-screenshot.png"
7
8channel.deleteFile(fileId, fileName).async { result ->
9 result.onSuccess {
10 println("File '$fileName' successfully deleted from 'support' channel.")
11 }.onFailure {
12 // handle error
13 println("Error deleting file '$fileName': ${it.message}")
14 }
15}
Last updated on