ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-将文件上传到Azure Blob存储

2019-11-18 14:18:22  阅读:761  来源: 互联网

标签:azure azure-storage-blobs c


我想异步地将文件上传到Azure blob存储.我尝试了官方SDK中建议的方式:

这是我得到容器的方式:

public static class BlobHelper
{
    public static CloudBlobContainer GetBlobContainer()
    {
        // Pull these from config
        var blobStorageConnectionString = ConfigurationManager.AppSettings["BlobStorageConnectionString"];
        var blobStorageContainerName = ConfigurationManager.AppSettings["BlobStorageContainerName"];

        // Create blob client and return reference to the container
        var blobStorageAccount = CloudStorageAccount.Parse(blobStorageConnectionString);
        var blobClient = blobStorageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference(blobStorageContainerName);
        container.CreateIfNotExists();
        container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
        return container;
    }
}

这就是我尝试上传文件的方式:

var documentName = Guid.NewGuid().ToString();

CloudBlobContainer container = BlobHelper.GetBlobContainer();

CloudBlockBlob blockBlob = container.GetBlockBlobReference(documentName);

public class FilesService
{
    public async Task<string> UploadFiles(HttpContent httpContent)
    {

        var documentName = Guid.NewGuid().ToString();

        CloudBlobContainer container = BlobHelper.GetBlobContainer();

        CloudBlockBlob blockBlob = container.GetBlockBlobReference(documentName);

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

        return blockBlob.Uri.ToString();
    }
}

问题是我不知道如何获取文件的路径(该路径由用户上传).

当我尝试这个:

var rootpath =  HttpContext.Current.Server.MapPath("~/App_Data");

var streamProvider = new MultipartFileStreamProvider(rootpath);

await httpContent.ReadAsMultipartAsync(streamProvider);
foreach (var file in streamProvider.FileData)
{
    var localName = file.LocalFileName;
    using (var fileStream = System.IO.File.OpenRead(file.LocalFileName))
    {
        await blockBlob.UploadFromStreamAsync(fileStream);
    }
}

当我尝试发布请求时.该请求只是崩溃而不会返回任何内容(即使是异常);

解:

该问题已通过以下方式解决.我使用了一种服务方法,以便能够上载文件集合.

Service Method to upload a collection of blobs

在BlobHelper类中,我保存了有关容器的所需信息,然后实例化它,这是一个静态类.使用集合可以将多个文件作为同一流的一部分上载.

解决方法:

我认为您正在尝试获取使用标准ASP.NET方法和本地上下文上传到Blob存储的文件的路径.上传到Blob的文件将无法通过这种方式访问​​.

好像您正确上传了Blob.现在,如果文件成功上传,则您的方法应返回blockBlob.Uri.ToString(),这是文件的链接-您可以将其存储在数据库中的某个位置或其他位置.

标签:azure,azure-storage-blobs,c
来源: https://codeday.me/bug/20191118/2028835.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有