Microsoft Azure:获取Blob文件的本地磁盘地址

时间:2018-01-19 20:29:55

标签: azure azure-storage-blobs

下面的代码从用户的表单提交中上传Excel文件。但是,我想使用EPplus将Excel文件写入数据库。为此,我需要磁盘上的文件地址,而不是网址。我怎么能得到它?

相关代码:

{
    public class ExcelService
    {
        public async Task<string> UploadExcelAsync(HttpPostedFileBase upload)
        {
            string excelFullPath = null;
            if (upload == null || upload.ContentLength == 0)
            {
                return null;
            }
            try
            {
                CloudStorageAccount cloudStorageAccount = ConnectionString.GetConnectionString();
                CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
                CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("excel");

                if (await cloudBlobContainer.CreateIfNotExistsAsync())
                {
                    await cloudBlobContainer.SetPermissionsAsync(
                        new BlobContainerPermissions
                        {
                            PublicAccess = BlobContainerPublicAccessType.Blob
                        }
                        );
                }
                string excelName = Guid.NewGuid().ToString() + "-" + Path.GetExtension(upload.FileName);

                CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(excelName);
                cloudBlockBlob.Properties.ContentType = upload.ContentType;
                await cloudBlockBlob.UploadFromStreamAsync(upload.InputStream);

                excelFullPath = cloudBlockBlob.Uri.ToString();
            }
            catch (Exception ex)
            {

            }
            return excelFullPath;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你做不到。 Azure存储Blob是一种云服务,仅显示对存储的Blob的Web访问,因此您可以访问的磁盘上没有物理位置。因此,除非您下载文件,编辑它并再次上传,否则无法直接编辑它。

另一种方法是使用Azure Storage Files。仍然是基于Azure Cloud的存储服务,但它允许您将文件夹映射到您的计算机,以便您可以像任何网络共享一样访问它。见the docs。当然,这只有在您能够在Web服务器上创建文件共享时才有效。

遗憾的是,您无法使用Azure Web Apps(source)访问Azure存储文件共享,因此,如果您的Web应用程序的托管方式与您运气不佳有关。