Luis Valencia
Luis Valencia

Reputation: 33978

How to upload a file posted in REST API to Azure Storage

I need to be able to select a file in a REACT UI, then it will call a REST Service with the posted file as one of the parameters, and then upload to Azure Storage

I have something like this:

  public async Task<IHttpActionResult>  PutTenant(string id, Tenant tenant, HttpPostedFile certificateFile)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStorageKey"].ToString());
            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve reference to a previously created container.
            CloudBlobContainer container = blobClient.GetContainerReference(ConfigurationManager.AppSettings["certificatesContainer"].ToString());

            // Retrieve reference to a blob named "myblob".
            CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");

            // Create or overwrite the "myblob" blob with contents from a local file.
            using (var fileStream = System.IO.File.OpenRead(certificateFile))
            {
                blockBlob.UploadFromStream(fileStream);
            }

            var tenantStore = CosmosStoreFactory.CreateForEntity<Tenant>();
            tenant.CertificatePath = blockBlob.Uri;

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            if (id != tenant.TenantId)
            {
                return BadRequest();
            }

            var added = await tenantStore.AddAsync(tenant);
            return StatusCode(HttpStatusCode.NoContent); 
        }

The openread line is where I am not sure, how to take the HttpPostedFile and then upload to Azure Storage.

Upvotes: 2

Views: 511

Answers (1)

root_access
root_access

Reputation: 162

You should be using the builtin HttpPostedFile.InputStream to directly upload to blob, and also set filetype of blob.

Replace your using (var fileStream block with the below:

blockBlob.Properties.ContentType = certificateFile.ContentType;
blockBlob.UploadFromStream(certificateFile.InputStream);

Upvotes: 2

Related Questions