Upload file into Blob Azure

2019-07-13 03:34发布

问题:

I'm trying to upload files into blob Azure from an MVC app, I'm following this tutorial, and I'm stuck in this snippet:

using (var fileStream = System.IO.File.OpenRead(@"path\myfile"))
{
    blockBlob.UploadFromStream(fileStream);
}

How to make @"path\myfile" dynamic?? How to retrieve the real path of my file to put it in there? I accept any other suggestion too to upload to blob :)

UPDATE

As suggested I added the code inside my View:

@model RiPSShared.Models.RiPSModels.AgencyNote

<h2>PostFile</h2>

<form action="@Url.Action("PostFile", "AgencyNotes", new { NoteId=Model.aut_id})" method = "post" enctype="multipart/form-data">
    <label for="file1"> File name:</label>
    <input type="file" name="file" id="file1" />
    <input type="submit" value="Submit" />    
</form>

And the full action controller:

 public ActionResult PostFile(HttpPostedFileBase file, int NoteId)
 {
 CloudBlockBlob blockBlob = container.GetBlockBlobReference(path);
 using (Stream fileStream = file.InputStream)
            {
                blockBlob.UploadFromStream(fileStream);
            }
 return RedirectToAction("Index");
}

回答1:

HttpPostedFileBase will have the information you need. Specifically the InputStream property will give you the stream

[HttpPost]
public ActionResult PostFile(HttpPostedFileBase file, int NoteId)  
{   
    // Your existing code for azure blob access
    CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");
    // make sure to a null check on file parameter before accessing the InputStream

    using (var s = file.InputStream)
    {
       blockBlob.UploadFromStream(s);
    }
    // to do :Return something
}


回答2:

Also you set your connection string in configuration file and get from that and store file into blob storage first get its container name

     //StorageConnectionString string specified in configuration file
       CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("StorageConnectionString"));

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve a reference to a container.
        //specified container name
        CloudBlobContainer container = blobClient.GetContainerReference("myBlobcontainer");

        // Create the container if it doesn't already exist.
        container.CreateIfNotExists();

        container.SetPermissions(
        new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

        CloudBlockBlob blockBlob = container.GetBlockBlobReference("myBlob");

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