【问题标题】:how to bulkcopy Excel file from Azure Blob如何从 Azure Blob 批量复制 Excel 文件
【发布时间】:2014-09-26 04:36:36
【问题描述】:

我制作了一个 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。 但我无法批量复制它。

请提出建议。

【问题讨论】:

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


    【解决方案1】:

    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.config) 阻止对该文件夹的所有外部访问,以便它只能由后端访问(控制器操作、代码等)。

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

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

    【讨论】:

    • 嗨 astaykov,这是我正在研究的一个简单的 POC。所以我跳过了所有好的做法:)。
    • 所以,要么我不明白你的问题,要么你 - 我的答案。什么不清楚?!
    • 我猜这不适用于 azure(Microsoft.ACE.OLEDB.12.0) 我无法在本地保存文件。它需要保存在 azure blobstorage 上。并且将使用批量上传将同一文件(位于 blob 上)的内容复制到 sql server 中。
    猜你喜欢
    • 2019-03-19
    • 2021-05-29
    • 2017-08-03
    • 2016-08-10
    • 1970-01-01
    • 2013-12-23
    • 2020-08-18
    • 2021-07-29
    • 2014-05-10
    相关资源
    最近更新 更多