Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add JSON string directly to Azure Blob Storage Container using C#

I am trying to load a JSON string (serialized with Newtonsoft.Json) without creating a temporary file.

I am serializing object in runtime using JsonConvert.SerializeObject(obj,settings) which returns a string.

Following Microsoft documentation I could do as it's illustrated below:

// 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();

Although it works, I would have to create temporary file for each uploaded JSON file.

I tried this:

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();

But, well...it doesn't have right to work as I am not specifing any actual file in the given container (I don't know where to do it).

Is there any way to upload a blob directly to a given container?

Thank You in advance.

like image 885
Kamil Turowski Avatar asked Apr 17 '20 20:04

Kamil Turowski


People also ask

How to create blob container in Azure Storage?

Select the storage account and then the “ Containers ” option under “ Data storage ” as below, Next, select “ + Container ” to add a new container as below, Name the container “ blobcontainer ” and create it. Finally, copy the connection string from the storage account as this is needed to access the container from the C# code.

Where can I Find my Azure Blob connection string?

You can find your Azure Blob connection string in your Azure accounts. Search for your Blob storage name and copy one of the two available keys: Azure Blob storage key

How to create a blob container in Salesforce?

The first we need to do is to search for the service " Storage account - blob, file, table, queue ", and click on the result. Enter all the necessary fields and click Create. The next move is to create a Blob Container. To do this, from the main storage account blade find the BLOB SERVICE, select Blobs and then +Container, type the

Why can't I upload a JSON object to blobclient?

If you're trying to upload a json object and not a json formatted string, you'll first need to turn the json obj into a string so that BlobClient can upload. e.g. if getting a json obj from an api... Thanks for contributing an answer to Stack Overflow!


Video Answer


1 Answers

The BlobClient class wants a Stream, so you can create a MemoryStream from your JSON string.
Try something like this:

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

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonToUpload)))
{
    await blob.UploadAsync(ms);
}
like image 67
Brian Rogers Avatar answered Sep 21 '22 17:09

Brian Rogers