Добавьте JSON строку непосредственно в Azure Контейнер хранения BLOB-объектов, используя C# - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь загрузить строку JSON (сериализованную с Newtonsoft. Json) без создания временного файла.

Я сериализую объект во время выполнения, используя JsonConvert.SerializeObject (obj, settings), который возвращает строку.

Следуя документации Microsoft, я мог бы сделать, как показано ниже:

// Create a local file in the ./data/ directory for uploading and downloading
string localPath = "./data/";
string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
string localFilePath = Path.Combine(localPath, fileName);

// Write text to the file
await File.WriteAllTextAsync(localFilePath, "Hello, World!");

// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient(fileName);

Console.WriteLine("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);

// Open the file and upload its data
using FileStream uploadFileStream = File.OpenRead(localFilePath);
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();

Хотя это работает, мне нужно будет создать временный файл для каждого загруженного JSON file.

Я попробовал это:

BlobServiceClient blobServiceClient = new BlobServiceClient("SECRET");

BlobContainerClient container = BlobServiceClient.GetBlobContainerClient("CONTAINER_NAME");

container.CreateIfNotExistsAsync().Wait();

container.SetAccessPolicy(Azure.Storage.Blobs.Models.PublicAccessType.Blob);

CloudBlockBlob cloudBlockBlob = new CloudBlockBlob(container.Uri);

var jsonToUplaod = JsonConvert.SerializeObject(persons, settings);

cloudBlockBlob.UploadTextAsync(jsonToUpload).Wait();

Но, хорошо ... он не имеет права работать, так как я не указываю какой-либо фактический файл в данном контейнере (Я не знаю, где это сделать).

Есть ли способ загрузить BLOB-объект непосредственно в данный контейнер?

Заранее спасибо.

1 Ответ

3 голосов
/ 18 апреля 2020

Класс BlobClient хочет Stream, поэтому вы можете создать MemoryStream из вашей строки JSON.
Попробуйте что-то вроде этого:

BlobClient blob = container.GetBlobClient("YourBlobName");

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonToUpload)))
{
    await blob.UploadAsync(ms);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...