如何从Azure Blob批量复制Excel文件

时间:2014-09-26 04:36:37

标签: asp.net-mvc azure azure-sql-database azure-storage azure-storage-blobs

我制作了一个mvc应用程序,它将excel文件保存在azure blob blob存储上。现在我想阅读这个excel文件的内容。

之前我将此文件保存在我的c:/ temp文件夹中,并将代码批量复制,如下所示: -

         string excelConnectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data      Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""", path);

        OleDbConnection connection = new OleDbConnection();

        connection.ConnectionString = excelConnectionString;

        OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);

        connection.Open();

        DbDataReader dr = command.ExecuteReader();
            using (var bulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["myString"].ConnectionString, SqlBulkCopyOptions.KeepNulls & SqlBulkCopyOptions.KeepIdentity))
            {
               //my logic
             }
          connection.Close();

因为我想在Azure云上实现此解决方案。

现在我将excel文件保存到Azure blobstorage而不是c:/ temp。 但我无法对其进行批量复制。

请提出建议。

1 个答案:

答案 0 :(得分:0)

Microsoft.ACE.OLEDB.12.0是安装Microsoft Office的驱动程序。任何Azure计算机上都没有安装Office。为了阅读Excel文件,我建议您使用OpenXML SDK或其周围的一些包装,如OpenExcelClosedXML。如果您需要阅读早于2007年的Excel文件格式,则无法在云中执行此操作。

其余的: 其他一切(BulkInsert等)都可以。 经验法则 - 一般来说,在Web编程中,在任何编程中,都不要依赖固定/硬编码路径!

在本地保存文件,然后批量复制它。

对于Web方案,对于任何环境(不仅仅是Azure),您至少有两个选项可以选择本地路径来保存blob中的文件:

  

在磁盘上创建一个唯一命名的零字节临时文件并返回   该文件的完整路径。

我个人更喜欢后者 - Server.MapPath,用法如下:

var localPath = Server.MapPath("~/tmp");
var fileName = "name_of_my_file.xlsx";
var fullPathToFile = System.IO.Path.Combine(localPath, fileName);

这将在我的Web应用程序中的“tmp”文件夹中提供可写文件的完整路径,该文件夹位于我的Web应用程序根目录中。我也可以使用配置(web.config)阻止对该文件夹的所有外部访问,这样它只能被后端访问(控制器动作,代码等)。

使用前者(System.IO.Path.GetTempFilename)将为您提供System TEMP文件夹中的唯一文件。我不会在任何系统中使用它 - TEMP文件夹是任何进程可以读取和写入的文件夹。

如果您不知道如何从Blob下载文件,请阅读this tutorial中的How to: Download blobs