File Sharing API for PubNub Unity 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.

Send file

Upload file / data to specified channel.

Method(s)

pubnub.SendFile()
.Channel(string)
.File(string|byte[])
.Texture(Texture2D | RenderTexture)
.FileName(string)
.Ttl(int)
.ShouldStore(bool)
.Message(string)
.Meta(Dictionary<string, object>)
.Execute(System.Action<PNFileUploadResult, PNStatus>)
ParameterTypeRequiredDescription
ChannelstringYesChannel for the file.
Filestring or byte[]Yes

You can either use File or Texture.
Full path of the file with file name or an array of bytes.
When using an array of bytes, you must set FileName.
TextureTexture2D or RenderTextureYes

You can either use File or Texture.
An instance of a Texture object. When you send a Texture, a Message with its size and format is added automatically.
FileNamestringRequired when sending a file by byte[]Name of the file to send. You can use it to override the default file name.
TtLintOptionalHow long message should be stored in channel's storage.
ShouldStoreboolOptionalWhether PubNub published file message should be stored in channel history.
MessagestringOptionalMessage which should be sent along with file to specified channel.
MetaDictionary<string, object>OptionalDictionary<string, object> with values which should be used by PubNub service to filter file messages.
ExecuteSystem.ActionYesSystem.Action of type PNFileUploadResult.
ExecuteAsyncNoneOptionalReturns Task<PNResult<PNFileUploadResult>>.
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.

Basic Usage

PNResult<PNFileUploadResult> fileUploadResponse = await pubnub.SendFile()
.Channel("my_channel")
.File("cat_picture.jpg") //checks the bin folder if no path is provided
.CipherKey("my_cipher_key")
.Message("Look at this photo!")
.ExecuteAsync();
PNFileUploadResult fileUploadResult = fileUploadResponse.Result;
PNStatus fileUploadStatus = fileUploadResponse.Status;
if (!fileUploadStatus.Error && fileUploadResult != null)
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(fileUploadResult));
}
else
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(fileUploadStatus));
show all 16 lines

Response

{
"Timetoken":15957709330808500,
"FileId":"d9515cb7-48a7-41a4-9284-f4bf331bc770",
"FileName":"cat_picture.jpg"
}

Returns

The SendFile() operation returns a PNResult``<PNFileUploadResult> which contains the following properties:

Property NameTypeDescription
ResultPNFileUploadResultReturns a PNFileUploadResult object.
StatusPNStatusReturns a PNStatus object.

PNFileUploadResult contains the following properties:

Property NameTypeDescription
TimetokenlongReturns a PNFileUploadResult object.
FileIdstringReturns the ID of the file.
FileNamestringReturns the name of the file.

List channel files

Retrieve list of files uploaded to Channel.

Method(s)

pubnub.ListFiles()
.Channel(string)
.Limit(int)
.Next(string)
.QueryParam(Dictionary<string, object>)
.Execute(System.Action<PNListFilesResult, PNStatus>)
ParameterTypeRequiredDefaultDescription
ChannelstringYesChannel to get list of files.
LimitintOptional100Number of files to return.
NextstringOptionalRandom 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.
QueryParamDictionary<string, object>OptionalDictionary object to pass name/value pairs as query string params with PubNub URL request for debug purpose.
ExecuteSystem.ActionYesSystem.Action of type PNListFilesResult.
ExecuteAsyncNoneOptionalReturns Task<PNResult<PNListFilesResult>>.

Basic Usage

PNResult<PNListFilesResult> listFilesResponse = await pubnub.ListFiles()
.Channel("my_channel")
.ExecuteAsync();
PNListFilesResult listFilesResult = listFilesResponse.Result;
PNStatus listFilesStatus = listFilesResponse.Status;
if (!listFilesStatus.Error && listFilesResult != null)
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(listFilesResult));
}
else
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(listFilesStatus));
}

Response

{
"FilesList":[
{
"Name":"cat_picture.jpg",
"Id":"d9515cb7-48a7-41a4-9284-f4bf331bc770",
"Size":25778,
"Created":"2020-07-26T13:42:06Z"
}],
"Count":1,
"Next":null
}

Returns

The ListFiles() operation returns a PNResult<PNListFilesResult> which contains the following properties:

Property NameTypeDescription
ResultPNListFilesResultReturns a PNListFilesResult object.
StatusPNStatusReturns a PNStatus object.

PNListFilesResult contains the following properties:

Property NameTypeDescription
FilesListlist<PNFileResult>List of channel files.
CountintNumber of files returned.
NextstringRandom 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 NameTypeDescription
NamestringName of the file.
IdstringID of the file.
SizeintSize of the file.
CreatedstringCreate date of the file.

Get File Url

Generate URL which can be used to download file from target Channel.

Method(s)

pubnub.GetFileUrl()
.Channel(string)
.FileId(string)
.FileName(string)
.Execute(System.Action<PNFileUrlResult, PNStatus>)
ParameterTypeRequiredDescription
ChannelstringYesName of channel within which file with name has been uploaded.
FileIdstringYesUnique file identifier which has been assigned during file upload.
FileNamestringYesName under which uploaded file is stored for channel.
ExecuteSystem.ActionYesSystem.Action of type PNFileUrlResult.
ExecuteAsyncNoneOptionalReturns Task<PNResult<PNFileUrlResult>>.

Basic Usage

PNResult<PNFileUrlResult> getFileUrlResponse = await pubnub.GetFileUrl()
.Channel("my_channel")
.FileId("d9515cb7-48a7-41a4-9284-f4bf331bc770")
.FileName("cat_picture.jpg")
.ExecuteAsync();
PNFileUrlResult getFileUrlResult = getFileUrlResponse.Result;
PNStatus getFileUrlStatus = getFileUrlResponse.Status;
if (!getFileUrlStatus.Error && getFileUrlResult != null)
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(getFileUrlResult));
}
else
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(getFileUrlStatus));
}

Response

{
"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&timestamp=1595771548&uuid=pn-9ce9e988-8e04-40bf-90c4-ebe170478f7d"
}

Returns

The GetFileUrl() operation returns a PNResult<PNFileUrlResult> which contains the following properties:

Property NameTypeDescription
ResultPNFileUrlResultReturns a PNFileUrlResult object.
StatusPNStatusReturns a PNStatus object.

PNFileUrlResult contains the following properties:

Property NameTypeDescription
UrlstringURL which can be used to download remote file with specified name and identifier.

Download file

Download file from specified Channel.

Method(s)

pubnub.DownloadFile()
.Channel(string)
.FileId(string)
.FileName(string)
.Execute(System.Action<PNDownloadFileResult, PNStatus>)
ParameterTypeRequiredDescription
ChannelstringYesName of channel within which file with name has been uploaded.
FileIdstringYesUnique file identifier which has been assigned during file upload.
FileNamestringYesName under which uploaded file is stored for channel.
ExecuteSystem.ActionYesSystem.Action of type PNDownloadFileResult.
ExecuteAsyncNoneOptionalReturns Task<PNResult<PNDownloadFileResult>>.
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.

Basic Usage

PNResult<PNDownloadFileResult> fileDownloadResponse = await pubnub.DownloadFile()
.Channel("my_channel")
.FileId("d9515cb7-48a7-41a4-9284-f4bf331bc770")
.FileName("cat_picture.jpg")
.CipherKey("my_cipher_key")
.ExecuteAsync();
PNDownloadFileResult fileDownloadResult = fileDownloadResponse.Result;
PNStatus fileDownloadStatus = fileDownloadResponse.Status;
if (!fileDownloadStatus.Error && fileDownloadResult != null)
{
fileDownloadResult.SaveFileToLocal(downloadUrlFileName); //saves to bin folder if no path is provided
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(fileDownloadResult.FileName));
}
else
{
show all 17 lines

Response

{
//Call fileDownloadResult.SaveFileToLocal(<destination path>) to save file.
"FileBytes":"/9j/4AAQSkZJRgABAQEAkACQAAD/4RCERXhpZgAATU0AKgAAAAgABAE7AAIAAAAGAAAISodpAAQAAAABAAAIUJydAAEAAAA...<truncated due to lengthy data",
"FileName":"cat_picture.jpg"
}

Returns

The DownloadFile() operation returns a PNResult<PNDownloadFileResult> which contains the following properties:

Property NameTypeDescription
ResultPNDownloadFileResultReturns a PNDownloadFileResult object.
StatusPNStatusReturns a PNStatus object.

PNDownloadFileResult contains the following properties:

Property NameTypeDescription
FileBytesbyte[]byte array of the downloaded file. Use SaveFileToLocal method to copy file to local.
FileNamestringName 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)

pubnub.DeleteFile()
.Channel(string)
.FileId(string)
.FileName(string)
.Execute(System.Action<PNDeleteFileResult, PNStatus>)
ParameterTypeRequiredDescription
ChannelstringYesName of channel within which file with name needs to be deleted.
FileIdstringYesUnique file identifier of the file to be deleted.
FileNamestringYesName of the file to be deleted from the channel.
ExecuteSystem.ActionYesSystem.Action of type PNDeleteFileResult.
ExecuteAsyncNoneOptionalReturns Task<PNResult<PNDeleteFileResult>>.

Basic Usage

PNResult<PNDeleteFileResult> deleteFileResponse = await pubnub.DeleteFile()
.Channel("my_channel")
.FileId("d9515cb7-48a7-41a4-9284-f4bf331bc770")
.FileName("cat_picture.jpg")
.ExecuteAsync();
PNDeleteFileResult deleteFileResult = deleteFileResponse.Result;
PNStatus deleteFileStatus = deleteFileResponse.Status;
if (!deleteFileStatus.Error && deleteFileResult != null)
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(deleteFileResult));
}
else
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(deleteFileStatus));
}

Response

{}

Returns

The DeleteFile() operation returns a PNResult<PNDeleteFileResult> which contains the following properties:

Property NameTypeDescription
ResultPNDeleteFileResultReturns a PNDeleteFileResult object.
StatusPNStatusReturns a PNStatus object.

PNDeleteFileResult returns empty object

Publish file message

Publish file message from specified Channel.

Method(s)

pubnub.PublishFileMessage()
.Channel(string)
.FileId(string)
.FileName(string)
.Message(object)
.Meta(Dictionary<string, object>)
.ShouldStore(bool)
.Execute(System.Action<PNPublishFileMessageResult, PNStatus>)
ParameterTypeRequiredDefaultDescription
ChannelstringYesn/aName of channel to publish file message
FileIdstringYesn/aUnique file identifier of the file.
FileNamestringYesn/aName of the file.
MessagestringOptionaln/aThe payload.
MetastringOptionaln/aMeta data object which can be used with the filtering ability.
ShouldStoreboolOptionaltrueStore in history.
ExecuteSystem.ActionYesn/aSystem.Action of type PNPublishFileMessageResult.
ExecuteAsyncNoneOptionaln/aReturns Task<PNResult<PNPublishFileMessageResult>>.

Basic Usage

PNResult<PNPublishFileMessageResult> publishFileMsgResponse = await pubnub.PublishFileMessage()
.Channel("my_channel")
.FileId("d9515cb7-48a7-41a4-9284-f4bf331bc770")
.FileName("cat_picture.jpg") //checks the bin folder if no path is provided
.Message("This is a sample message")
.ExecuteAsync();
PNPublishFileMessageResult publishFileMsgResult = publishFileMsgResponse.Result;
PNStatus publishFileMsgStatus = publishFileMsgResponse.Status;
if (!publishFileMsgStatus.Error && publishFileMsgResult != null)
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(publishFileMsgResult));
}
else
{
Debug.Log(pubnub.JsonPluggableLibrary.SerializeToJsonString(publishFileMsgStatus));
show all 16 lines

Response

{
"Timetoken":15957738720237858
}

Returns

The PublishFileMessage() operation returns a PNResult<PNPublishFileMessageResult> which contains the following properties:

Property NameTypeDescription
ResultPNPublishFileMessageResultReturns a PNPublishFileMessageResult object.
StatusPNStatusReturns a PNStatus object.

PNPublishFileMessageResult contains the following properties:

Property NameTypeDescription
TimetokenlongReturns a long representation of the timetoken when the message was published.
Last updated on