下面的代码从用户的表单提交中上传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;
}
}
}
答案 0 :(得分:1)
你做不到。 Azure存储Blob是一种云服务,仅显示对存储的Blob的Web访问,因此您可以访问的磁盘上没有物理位置。因此,除非您下载文件,编辑它并再次上传,否则无法直接编辑它。
另一种方法是使用Azure Storage Files。仍然是基于Azure Cloud的存储服务,但它允许您将文件夹映射到您的计算机,以便您可以像任何网络共享一样访问它。见the docs。当然,这只有在您能够在Web服务器上创建文件共享时才有效。
遗憾的是,您无法使用Azure Web Apps(source)访问Azure存储文件共享,因此,如果您的Web应用程序的托管方式与您运气不佳有关。