WIP: C# implementation of FrostFS SDK
Pavel Gross
c9a75ea025
first iteration - base classes and methods Signed-off-by: Pavel Gross <p.gross@yadro.com> |
||
---|---|---|
.forgejo/workflows | ||
src | ||
.editorconfig | ||
.gitignore | ||
FrostFS.SDK.sln | ||
LICENSE | ||
README.md |
frostfs-sdk-csharp
C# implementation of FrostFS SDK.
Prerequisites
Get the key for your wallet
- Get the address
cat <path_to_your_wallet> | jq .accounts[0].address | tr -d '"'
- Get the key
neo-go wallet export -w <path_to_your_wallet> -d <address_from_p1>
Example usage
Container
using FrostFS.SDK;
using FrostFS.SDK.ClientV2;
using Microsoft.Extensions.Options;
var Key = "KwHDAJ66o8FoLBjVbjP2sWBmgBMGjt7Vv4boA7xQrBoAYBE397Aq";
var Host = "http://172.22.33.44:8080";
var options = Options.Create(new SingleOwnerClientSettings
{
Key = Key,
Host = Host
});
using var client = Client.GetSingleOwnerInstance(options);
await foreach (var cid in client.ListContainersAsync())
{
await client.DeleteContainerAsync(new PrmContainerDelete(cid));
}
var placementPolicy = new FrostFsPlacementPolicy(true, new FrostFsReplica(1));
var createContainerParam = new PrmContainerCreate(
new FrostFsContainerInfo(BasicAcl.PublicRW, new FrostFsPlacementPolicy(true, new FrostFsReplica(1))));
var containerId = await client.CreateContainerAsync(createContainerParam);
using var fileStream = File.OpenRead(@"C:\Users\Paul\Pictures\cat.jpeg");
var param = new PrmObjectPut
{
Header = new FrostFsObjectHeader(
containerId: containerId,
type: FrostFsObjectType.Regular,
[new FrostFsAttribute("fileName", "test")]),
Payload = fileStream
};
FrostFsObjectId objectId = await client.PutObjectAsync(param);
var filter = new FilterByAttribute(FrostFsMatchType.Equals, "fileName", "test");
await foreach (var objId in client.SearchObjectsAsync(new PrmObjectSearch(containerId) { Filters = [filter] }))
{
var objHeader = await client.GetObjectHeadAsync(new PrmObjectHeadGet(containerId, objId));
}
var @object = await client.GetObjectAsync(new PrmObjectGet(containerId, objectId));
var downloadedBytes = new byte[@object.Header.PayloadLength];
MemoryStream ms = new(downloadedBytes);
ReadOnlyMemory<byte>? chunk = null;
while ((chunk = await @object.ObjectReader!.ReadChunk()) != null)
{
ms.Write(chunk.Value.Span);
}