File Sharing API for C# SDK
Allows users to upload and share files. You can upload any file of up to 5 MB in size. This feature is commonly used in social apps to share images, or in medical apps to share medical records for patients.
When a file is uploaded on a channel, it's stored and managed using a storage service, and associated with your key. Subscribers to that channel receive a file event which contains a file ID, filename, and optional description.
Request execution
Use try/catch when working with the C# SDK.
If a request has invalid parameters (for example, a missing required field), the SDK throws an exception. If the request reaches the server but fails (server error or network issue), the error details are available in the returned status.
1try
2{
3 PNResult<PNPublishResult> publishResponse = await pubnub.Publish()
4 .Message("Why do Java developers wear glasses? Because they can't C#.")
5 .Channel("my_channel")
6 .ExecuteAsync();
7
8 PNStatus status = publishResponse.Status;
9
10 Console.WriteLine("Server status code : " + status.StatusCode.ToString());
11}
12catch (Exception ex)
13{
14 Console.WriteLine($"Request can't be executed due to error: {ex.Message}");
15}
Send file
Upload the file to a specified channel.
This method covers the entire process of sending a file, including preparation, uploading the file to a cloud storage service, and post-uploading messaging on a channel.
For the last messaging step, SendFile internally calls the PublishFileMessage method to publish a message on the channel.
The published message contains metadata about the file, such as the file identifier and name, enabling others on the channel to find out about the file and access it.
Method(s)
1pubnub.SendFile()
2 .Channel(string)
3 .File(string|byte[])
4 .FileName(string)
5 .Message(string)
6 .ShouldStore(bool)
7 .Meta(Dictionary<string, object>)
8 .Ttl(int)
9 .CustomMessageType(string)
| Parameter | Description |
|---|---|
Channel *Type: string | Channel for the file. |
File *Type: string or byte[] | Full path of the file with file name or an array of bytes. When using an array of bytes, you must set FileName. |
FileNameType: string | Name of the file to send. You can use it to override the default file name. |
MessageType: string | Message which should be sent along with file to specified channel. |
ShouldStoreType: bool | Whether PubNub published file message should be stored in channel history. |
MetaType: Dictionary <string, object> | Dictionary<string, object> with values which should be used by PubNub service to filter file messages. |
TtLType: int | How long message should be stored in channel's storage. |
CustomMessageTypeType: string | A case-sensitive, alphanumeric string from 3 to 50 characters describing the business-specific label or category of the message. Dashes - and underscores _ are allowed. The value cannot start with special characters or the string pn_ or pn-. Examples: text, action, poll. |
Deprecated parameter
The CipherKey parameter in this method is deprecated. We recommend that you configure the crypto module on your PubNub instance instead.
If you pass CipherKey as an argument, it overrides the crypto module configuration and the legacy encryption with 128-bit cipher key entropy is used.
Sample code
Reference code
1
Response
1{
2 "Timetoken":15957709330808500,
3 "FileId":"d9515cb7-48a7-41a4-9284-f4bf331bc770",
4 "FileName":"cat_picture.jpg"
5}
Returns
The SendFile() operation returns a PNResult``<PNFileUploadResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNFileUploadResult | Returns a PNFileUploadResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNFileUploadResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Timetoken | long | Returns a PNFileUploadResult object. |
FileId | string | Returns the ID of the file. |
FileName | string | Returns the name of the file. |
List channel files
Retrieve list of files uploaded to Channel.
Method(s)
1pubnub.ListFiles()
2 .Channel(string)
| Parameter | Description |
|---|---|
Channel *Type: string Default: n/a | Channel to get list of files. |
LimitType: int Default: 100 | Number of files to return. |
NextType: string Default: n/a | 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. |
Sample code
1
Response
1{
2 "FilesList":[
3 {
4 "Name":"cat_picture.jpg",
5 "Id":"d9515cb7-48a7-41a4-9284-f4bf331bc770",
6 "Size":25778,
7 "Created":"2020-07-26T13:42:06Z"
8 }],
9 "Count":1,
10 "Next":null
11}
Returns
The ListFiles() operation returns a PNResult<PNListFilesResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNListFilesResult | Returns a PNListFilesResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNListFilesResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
FilesList | list<PNFileResult> | List of channel files. |
Count | int | Number of files returned. |
Next | 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. |
PNFileResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Name | string | Name of the file. |
Id | string | ID of the file. |
Size | int | Size of the file. |
Created | string | Create date of the file. |
Get file URL
Generate URL which can be used to download file from target Channel.
Method(s)
1pubnub.GetFileUrl()
2 .Channel(string)
3 .FileId(string)
4 .FileName(string)
| Parameter | Description |
|---|---|
Channel *Type: string | Name of channel within which file with name has been uploaded. |
FileId *Type: string | Unique file identifier which has been assigned during file upload. |
FileName *Type: string | Name under which uploaded file is stored for channel. |
Sample code
1
Response
1{
2 "Url":"http://ps.pndsn.com/v1/files/demo/channels/my_channel/files/d9515cb7-48a7-41a4-9284-f4bf331bc770/cat_picture.jpg?pnsdk=NET461CSharp4.9.0.0×tamp=1595771548&uuid=pn-9ce9e988-8e04-40bf-90c4-ebe170478f7d"
3}
Returns
The GetFileUrl() operation returns a PNResult<PNFileUrlResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNFileUrlResult | Returns a PNFileUrlResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNFileUrlResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Url | string | URL which can be used to download remote file with specified name and identifier. |
Download file
Download file from specified Channel.
Method(s)
1pubnub.DownloadFile()
2 .Channel(string)
3 .FileId(string)
4 .FileName(string)
| Parameter | Description |
|---|---|
Channel *Type: string | Name of channel within which file with name has been uploaded. |
FileId *Type: string | Unique file identifier which has been assigned during file upload. |
FileName *Type: string | Name under which uploaded file is stored for channel. |
Deprecated parameter
The CipherKey parameter in this method is deprecated. We recommend that you configure the crypto module on your PubNub instance instead.
If you pass CipherKey as an argument, it overrides the crypto module configuration and the legacy encryption with 128-bit cipher key entropy is used.
Sample code
1
Response
1{
2 //Call fileDownloadResult.SaveFileToLocal(<destination path>) to save file.
3 "FileBytes":"/9j/4AAQSkZJRgABAQEAkACQAAD/4RCERXhpZgAATU0AKgAAAAgABAE7AAIAAAAGAAAISodpAAQAAAABAAAIUJydAAEAAAA...<truncated due to lengthy data",
4 "FileName":"cat_picture.jpg"
5}
Returns
The DownloadFile() operation returns a PNResult<PNDownloadFileResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNDownloadFileResult | Returns a PNDownloadFileResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNDownloadFileResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
FileBytes | byte[] | byte array of the downloaded file. Use SaveFileToLocal method to copy file to local. |
FileName | string | Name of the downloaded file from channel. |
SaveFileToLocal(string) | Provide full destination path to SaveFileToLocal for saving the downloaded file locally. |
Delete file
Delete file from specified Channel.
Method(s)
1pubnub.DeleteFile()
2 .Channel(string)
3 .FileId(string)
4 .FileName(string)
| Parameter | Description |
|---|---|
Channel *Type: string | Name of channel within which file with name needs to be deleted. |
FileId *Type: string | Unique file identifier of the file to be deleted. |
FileName *Type: string | Name of the file to be deleted from the channel. |
Sample code
1
Response
1{}
Returns
The DeleteFile() operation returns a PNResult<PNDeleteFileResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNDeleteFileResult | Returns a PNDeleteFileResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNDeleteFileResult returns empty object
Publish file message
Publish the uploaded file message to a specified channel.
This method is called internally by SendFile as part of the file-sending process to publish the message with the file (already uploaded in a storage service) on a channel.
This message includes the file's unique identifier and name elements, which are needed to construct download links and inform channel subscribers that the file is available for download.
You can call this method when SendFile fails and returns the status.operation === PNPublishFileMessageOperation error.
In that case, you can use the data from the status object to try again and use PublishFileMessage to manually resend a file message to a channel without repeating the upload step.
Method(s)
1pubnub.PublishFileMessage()
2 .Channel(string)
3 .FileId(string)
4 .FileName(string)
5 .Message(object)
6 .Meta(Dictionary<string, object>)
7 .ShouldStore(bool)
8 .CustomMessageType(string)
| Parameter | Description |
|---|---|
Channel *Type: string Default: n/a | Name of channel to publish file message |
FileId *Type: string Default: n/a | Unique file identifier of the file. |
FileName *Type: string Default: n/a | Name of the file. |
MessageType: string Default: n/a | The payload. |
MetaType: string Default: n/a | Meta data object which can be used with the filtering ability. |
ShouldStoreType: bool Default: true | Store in history. |
CustomMessageTypeType: string Default: n/a | A case-sensitive, alphanumeric string from 3 to 50 characters describing the business-specific label or category of the message. Dashes - and underscores _ are allowed. The value cannot start with special characters or the string pn_ or pn-. Examples: text, action, poll. |
Sample code
1
Response
1{
2 "Timetoken":15957738720237858
3}
Returns
The PublishFileMessage() operation returns a PNResult<PNPublishFileMessageResult> which contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Result | PNPublishFileMessageResult | Returns a PNPublishFileMessageResult object. |
Status | PNStatus | Returns a PNStatus object. |
PNPublishFileMessageResult contains the following properties:
| Property Name | Type | Description |
|---|---|---|
Timetoken | long | Returns a long representation of the timetoken when the message was published. |