简体   繁体   English

Azure Blob将文件上传到存储

[英]Azure Blob uploading file to storage

In my project, I need the user to upload a file, this is then sent to Blob storage. 在我的项目中,我需要用户上传文件,然后将其发送到Blob存储。 Currently, I can only send files already stored, I need it to send files that the user uploads. 目前,我只能发送已经存储的文件,我需要它发送用户上传的文件。

Here is my current code to upload the file, however, I am unsure how to modify 这是我当前上传文件的代码,但是,我不确定如何修改

using (var fileStream = System.IO.File.OpenRead(file)) 使用(var fileStream = System.IO.File.OpenRead(file))

So that It takes a file from the "HttpPostedFile file" 这样就可以从“ HttpPostedFile文件”中获取文件

The commented out parts of the code are the old version that stored it onto my system and not the cloud. 代码中注释掉的部分是将其存储到我的系统而不是云中的旧版本。

    // POST: DocumentUps/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CreateUpload([Bind(Include = "DocumentId,DocName,creationDate,RevisionNumber,Author,Status,ActivationDate,Attachment,RevisionId")] DocumentUps documentUps, HttpPostedFileBase file)
    {


        if (ModelState.IsValid)
        {
            documentUps.RevisionId = documentUps.DocumentId;
            documentUps.Username = User.Identity.Name;
            documentUps.Attachment = file.FileName;
            documentUps.creationDate = DateTime.Now;
            documentUps.ActivationDate = DateTime.Now;
            documentUps.RevisionNumber = 0;
            documentUps.Status = StatusChoice.Draft;

            db.DocumentUps.Add(documentUps);
            db.SaveChanges();

            int id = documentUps.DocumentId;


            DocumentUps docsup = db.DocumentUps.Find(id);

            documentUps.RevisionId = id;
            documentUps.Username = User.Identity.Name;
            documentUps.Attachment = documentUps.Attachment;
            documentUps.DocumentId = documentUps.DocumentId;
            documentUps.creationDate = documentUps.creationDate;
            documentUps.ActivationDate = DateTime.Now;
            documentUps.RevisionNumber = 0;
            documentUps.DocName = documentUps.DocName;
            documentUps.Author = documentUps.Author;
            documentUps.Status = StatusChoice.Draft;

            db.Entry(documentUps).State = EntityState.Modified;
            db.SaveChanges();


            if (file != null && file.ContentLength > 0)
            {

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                CloudConfigurationManager.GetSetting("filestorageideagen_AzureStorageConnectionString"));

                Microsoft.WindowsAzure.StorageClient.CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

                Microsoft.WindowsAzure.StorageClient.CloudBlobContainer container = blobClient.GetContainerReference("documentuploader");

                Microsoft.WindowsAzure.StorageClient.CloudBlockBlob blob = container.GetBlockBlobReference("TestUpload");

                using (var fileStream = System.IO.File.OpenRead(file))
                {
                    blob.UploadFromStream(fileStream);
                }


                //var fileName = documentUps.DocumentId.ToString() + documentUps.RevisionId.ToString() + Path.GetFileName(file.FileName);

                //var path = Path.Combine(Server.MapPath("~/Content/fileHistory"), fileName);
                //file.SaveAs(path);
            }

As @Brendan Green mentioned, using InputStream property of HttpPostedFile will solve your issue. 正如@Brendan Green提到的那样,使用HttpPostedFile的InputStream属性将解决您的问题。 Please use following code to replace your original upload code. 请使用以下代码替换原始的上传代码。

//set content type of your blob
blob.Properties.ContentType = file.ContentType;
//upload your file to your blob
blob.UploadFromStream(file.InputStream);

Microsoft.WindowsAzure.StorageClient.CloudBlobClient Microsoft.WindowsAzure.StorageClient.CloudBlobClient

Based on your code, you are using the old version of storage client library. 根据您的代码,您正在使用旧版本的存储客户端库。 The newest version is 8.1. 最新版本是8.1。 If you are the starter to use Azure Storage client library. 如果您是使用Azure存储客户端库的初学者。 We suggest you upgrade to the latest version by using NuGet. 我们建议您使用NuGet升级到最新版本。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM