views:

237

answers:

5

I wanted to create some subdirectories inside my blob. But it is not working out well

Here is my code

protected void ButUpload_click(object sender, EventArgs e)
    {
        // store upladed file as a blob storage
        if (uplFileUpload.HasFile)
        {
            name = uplFileUpload.FileName;
            // get refernce to the cloud blob container
            CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("documents");

            if (textbox.Text != "")
            {
                name = textbox.Text + "/" + name;
            }
            // set the name for the uploading files
            string UploadDocName = name;

            // get the blob reference and set the metadata properties
            CloudBlockBlob blob = blobContainer.GetBlockBlobReference(UploadDocName);
            blob.Metadata["FILETYPE"] = "text";
            blob.Properties.ContentType = uplFileUpload.PostedFile.ContentType;

            // upload the blob to the storage
            blob.UploadFromStream(uplFileUpload.FileContent);

        }
    }

What I did is that, If I have to create a sub directory, I will enter the name of the sub directory in the textbox.

for example, if I need to create a file named "test.txt" inside the sub directory "files" Then, my textbox.text = files and uplFileUpload.FileName = test.txt

Now I will concatenate them and upload to the blob.. But it is not working well.. I am getting just https://test.core.windows.net/documents/files/

I am not getting the entire thing I was expecting https://test.core.windows.net/documents/files/test.txt

What am I doing wrong... How to create sub directories inside the blob.

A: 

At first glance, this code looks fine. I would step through the code and verify that UploadDocName is what you expect it to be before you call GetBlockBlobReference().

smarx
A: 

I verified it, it was correct but it didn't work....

veda
A: 

Check blob.Uri after you do GetBlockBlobReference()?

BTW, every time I do this sort of code, I use GetBlobReference() instead... I wonder if there's some chance there's a difference there? (That would be extremely strange.)

smarx
A: 

Its working now... It was my mistake in the display the contents of the blob

protected void DisplayBlob_click(object sender, EventArgs e)
    {
        // get container referrence
        CloudBlobContainer blobContainer = cloudBlobClient.GetContainerReference("documents");

        // create list
        IEnumerable<IListBlobItem> blobList = blobContainer.ListBlobs();

        // display name on the page
        string names = string.Empty;

        foreach (IListBlobItem item in blobList)
        {
            names += item.Uri + "<br />";

        }

        LURI.Text = names;
    }

which shows only the current directory and doesn't traverse to the subdirectories....

Thanks....

veda
+1  A: 

You can use blobContainer.ListBlobs(new BlobRequestOptions { UseFlatBlobListing = true }); to get the view you're looking for (ignores the slashes and just lists all the blobs).

smarx