IVaultProtocol Interface |
Namespace: PDTec.IceNet.Core.Database
public interface IVaultProtocol
The IVaultProtocol type exposes the following members.
Name | Description | |
---|---|---|
IsAppendSupported |
Indicates whether the vault protocol implementation supports appending to a file content.
| |
PartSizeMax |
The maximum size (in bytes) of a chunk of binary content to be transferred in
a single CreateFileContentPartContinue(String, String, Int32, Int64, Byte) call.
| |
PartSizeMin |
The minimum size (in bytes) of a chunk of binary content to be transferred in
a single CreateFileContentPartContinue(String, String, Int32, Int64, Byte) call.
|
Name | Description | |
---|---|---|
AppendFileContent |
Appends binary content to a file.
| |
CreateFileContent |
Creates a new file content by sending the binary content in a single chunk.
| |
CreateFileContentPartCancel |
Cancels the file content creation process.
| |
CreateFileContentPartComplete |
Completes the file content creation process.
| |
CreateFileContentPartContinue |
Continues the file content creation process by sequentially providing a chunk of binary data.
| |
CreateFileContentPartStart |
Initiates a file content creation process.
| |
DeleteFileContent |
Deletes a file content.
| |
GetFileContentSize |
Retrieves the content file size.
| |
RetrieveFileContent |
Retrieves the file content.
| |
RetrieveFileContentPart |
Retrieves a segment of the file content.
|
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:
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.
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(); string correlationId = CreateFileContentPartStart(contentUuid); pProtocol.CreateFileContentPartContinue(contentUuid, correlationId, 0, aContent.Take(5).ToArray()); pProtocol.CreateFileContentPartContinue(contentUuid, correlationId, 1, aContent.Skip(5).ToArray()); pProtocol.CreateFileContentPartComplete(contentUuid, correlationId, 2); // // 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); });