Click or drag to resize
IVaultProtocol Interface
An abstraction of a vault's content access strategy.

Namespace: PDTec.IceNet.Core.Database
Assembly: PDTec.IceNet.Core (in PDTec.IceNet.Core.dll) Version: 6.0.0.0 (6.0.6225.27214)
Syntax
C#
public interface IVaultProtocol

The IVaultProtocol type exposes the following members.

Methods
  NameDescription
Public methodAppendFileContent
Appends binary content to a file.
Public methodCreateFileContent
Creates a new file content.
Public methodDeleteFileContent
Deletes a file content.
Public methodGetFileContentSize
Retrieves the content file size.
Public methodRetrieveFileContent
Retrieves the file content.
Public methodRetrieveFileContentPart
Retrieves a segment of the file content.
Top
Examples

This example explains how to work with vaults and file content directly. This can be useful to implement a transactional safe Web uploading process that enables to upload large files in parts, where the whole uploading process cannot be encapsulated in a single database transaction for HTTP request memory size and timeout reasons:

  • Create a FileContent record in the database and retrieve its UUID.
  • Upload the file in several steps by appending to the FileContent.
  • Create the File object and connect the FileContent.

This procedure ensures that if the upload process fails at one point, the file object does not appear in the database at all. This avoids broken file objects. Unconnected FileContents can be identified and removed easily by a vault utility.

The following code shows how to create a file in several steps and how the individual transactions can be separated from each other. If the vault is not a database vault, the transaction scopes around the IVaultProtocol calls are not necessary.

C#
byte[] aContent = Encoding.ASCII.GetBytes("1234567890");

IVault pVault = Repository.GetVaultByName("System.Database");

string contentUuid = null;

// 
// First step: create a FileContent record in the database...
// 

string hash = FileUtils.CalculateHash(aContent);

Repository.ExecuteTransaction(delegate
{
    contentUuid = pVault.CreateFileContent(aContent.Length, hash).Uuid;
});

// 
// Second step: Use the IVaultProtocol of the vault to upload the content...
// 

IVaultProtocol pProtocol = pVault.GetProtocol();

Repository.ExecuteTransaction(delegate()
{
    pProtocol.CreateFileContent(contentUuid, aContent.Take(5).ToArray());
});

Repository.ExecuteTransaction(delegate()
{
    pProtocol.AppendFileContent(contentUuid, aContent.Skip(5).ToArray());
});

// 
// Final step: Create the File object and connect the FileContent as a new content version...
// 

IFile pFile = null;

Repository.ExecuteTransaction(delegate
{
    pFile = Repository.GetObjTypeByName("Core.File").Create<IFile>(Repository.RootFolder, "F1", "");

    pFile.ConnectContent(true, "", "test.txt", contentUuid);
});
See Also