UploadBlockRequest Class
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Contains the data needed to upload a block of data to storage.
public ref class UploadBlockRequest sealed : Microsoft::Xrm::Sdk::OrganizationRequest
[System.Runtime.Serialization.DataContract(Namespace="http://schemas.microsoft.com/crm/2011/Contracts")]
public sealed class UploadBlockRequest : Microsoft.Xrm.Sdk.OrganizationRequest
[<System.Runtime.Serialization.DataContract(Namespace="http://schemas.microsoft.com/crm/2011/Contracts")>]
type UploadBlockRequest = class
inherit OrganizationRequest
Public NotInheritable Class UploadBlockRequest
Inherits OrganizationRequest
- Inheritance
- Attributes
Examples
The following example shows how to use this message. For this sample to work correctly, you must have an authenticated connection to the server with a client that implements the IOrganizationService interface instance.
/// <summary>
/// Uploads a file or image column value
/// </summary>
/// <param name="service">The service</param>
/// <param name="entityReference">A reference to the record with the file or image column</param>
/// <param name="fileAttributeName">The name of the file or image column</param>
/// <param name="fileInfo">Information about the file or image to upload.</param>
/// <param name="fileMimeType">The mime type of the file or image, if known.</param>
/// <returns></returns>
static Guid UploadFile(
IOrganizationService service,
EntityReference entityReference,
string fileAttributeName,
FileInfo fileInfo,
string fileMimeType = null)
{
// Initialize the upload
InitializeFileBlocksUploadRequest initializeFileBlocksUploadRequest = new()
{
Target = entityReference,
FileAttributeName = fileAttributeName,
FileName = fileInfo.Name
};
var initializeFileBlocksUploadResponse =
(InitializeFileBlocksUploadResponse)service.Execute(initializeFileBlocksUploadRequest);
string fileContinuationToken = initializeFileBlocksUploadResponse.FileContinuationToken;
// Capture blockids while uploading
List<string> blockIds = new();
using Stream uploadFileStream = fileInfo.OpenRead();
int blockSize = 4 * 1024 * 1024; // 4 MB
byte[] buffer = new byte[blockSize];
int bytesRead = 0;
long fileSize = fileInfo.Length;
// The number of iterations that will be required:
// int blocksCount = (int)Math.Ceiling(fileSize / (float)blockSize);
int blockNumber = 0;
// While there is unread data from the file
while ((bytesRead = uploadFileStream.Read(buffer, 0, buffer.Length)) > 0)
{
// The file or final block may be smaller than 4MB
if (bytesRead < buffer.Length)
{
Array.Resize(ref buffer, bytesRead);
}
blockNumber++;
string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));
blockIds.Add(blockId);
// Prepare the request
UploadBlockRequest uploadBlockRequest = new()
{
BlockData = buffer,
BlockId = blockId,
FileContinuationToken = fileContinuationToken,
};
// Send the request
service.Execute(uploadBlockRequest);
}
// Try to get the mimetype if not provided.
if (string.IsNullOrEmpty(fileMimeType))
{
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(fileInfo.Name, out fileMimeType))
{
fileMimeType = "application/octet-stream";
}
}
// Commit the upload
CommitFileBlocksUploadRequest commitFileBlocksUploadRequest = new()
{
BlockList = blockIds.ToArray(),
FileContinuationToken = fileContinuationToken,
FileName = fileInfo.Name,
MimeType = fileMimeType
};
var commitFileBlocksUploadResponse =
(CommitFileBlocksUploadResponse)service.Execute(commitFileBlocksUploadRequest);
return commitFileBlocksUploadResponse.FileId;
}
Remarks
The data can be whole or part of a binary file, annotation, or attachment. More information:
Constructors
UploadBlockRequest() |
Initializes a new instance of the UploadBlockRequest class. |
Properties
BlockData |
The data block to upload. |
BlockId |
A unique identifier for the block of data. |
ExtensionData |
Gets or sets the structure that contains extra data. Optional. (Inherited from OrganizationRequest) |
FileContinuationToken |
A token that uniquely identifies a sequence of related data uploads. |
Item[String] |
Gets or sets the indexer for the |
Parameters |
Gets or sets the collection of parameters for the request. Required, but is supplied by derived classes. (Inherited from OrganizationRequest) |
RequestId |
Gets or sets the ID of the request. Optional. (Inherited from OrganizationRequest) |
RequestName |
Gets or sets the name of the request. Required, but is supplied by derived classes. (Inherited from OrganizationRequest) |