需要通过oledb连接从azure存储blob容器中读取excel文件

Posted

技术标签:

【中文标题】需要通过oledb连接从azure存储blob容器中读取excel文件【英文标题】:Need to read the excel file from azure storage blob container through oledb connection 【发布时间】:2015-09-18 13:02:47 【问题描述】:

我已将我的网站托管到 azure...我已通过中间服务器将 Excel 文件上传到 azure 存储 blob 容器,因为我无法直接从网站访问 azure..所以我需要的是,我需要使用“oledb 连接”从 azure 存储 blob 容器(或)中间服务器本地路径读取 excel 文件并将其存储到数据表中以验证 excel ..所以任何人都可以帮助我进一步进行。

【问题讨论】:

我建议包含一些代码,以便其他人更容易重建您的问题。 【参考方案1】:

您从未编辑过您的问题以显示代码,并且您错误地发布为答案的代码已被删除,所以我在这里猜测一下,但是...我很确定问题是您正在尝试通过您的 OleDbConnection 将 blob 作为文件打开。

Azure 存储 blob 不能作为文件打开。如果您要像文件一样使用 blob 的内容,您首先需要下载它并将其保存为文件(或使用内存流,但在您的情况下,您需要一个文件)。然后就可以正常打开文件了。

由于您在基于 Azure 的 Web 应用程序中运行代码,因此理想情况下,您希望 Web 应用程序与存储帐户位于同一区域。您将下载到网络应用程序的本地磁盘(网络应用程序为您提供本地存储空间)。

处理完文件后,您需要将其上传回 Blob。

【讨论】:

:正如你提到的,使用内存流我已经使用 downloadtostream() 将文件下载到本地磁盘; :1)你能详细解释一下这一点吗?“你将下载到网络应用程序的本地磁盘(网络应用程序为你提供本地存储)。”“2 )正如你所提到的,使用内存流我已经使用downloadtostream()将文件下载到本地磁盘;但无法识别路径...3)如果我需要上传回blob意味着它们将是任何内存空间不足的可能性...4)我无法在问题中添加代码。,。【参考方案2】:
public string[] GetExcelSheets(string filename)
        
            String[] excelSheets = null;
            StorageCredentials creds = new StorageCredentials("<accountname>", "<key>");
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
            CloudBlobClient blobClient = account.CreateCloudBlobClient();
            CloudBlobContainer blobContainer = blobClient.GetContainerReference("documents");
            blobContainer.CreateIfNotExists();
           blobContainer.SetPermissions(new BlobContainerPermissions
  PublicAccess = BlobContainerPublicAccessType.Blob
            );
            CloudBlockBlob blob1 = blobContainer.GetBlockBlobReference(filename);
            try
            
                using (var stream = blob1.OpenRead())
                
                    OleDbConnection connection = new OleDbConnection();
                    var localPath = @"https://xxyyyyyyyyyyy.blob.core.windows.net/";
                    var fileName = @"C:\xxx" + @"\" + "9370.XLS";
                    var fullPathToFile = System.IO.Path.Combine(localPath, fileName);
                    string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0";
                   OleDbConnection oledbConn = new OleDbConnection(connString);
                    DataTable dt = new DataTable();
                    if (oledbConn.State == ConnectionState.Closed) oledbConn.Open();
                    // Get the data table containg the schema guid.
                    dt = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    oledbConn.Close();
                    if (dt == null) return null;
                    excelSheets = new String[dt.Rows.Count];
                    int i = 0;
                    // Add the sheet name to the string array.
                    foreach (DataRow row in dt.Rows)
                    
                        excel Sheets[i] = row["TABLE_NAME"].ToString();
                        i++;
                    
                
            
            catch (Exception ex)
            
                HTTP Context.Current.Res`enter code here`ponse.Write(ex.Message);
            
            return excel Sheets; 
this is the code i used to read the excel file but oledb data-source path is incorrect...can u suggest what path i should use to read the excel file in azure blob container 

【讨论】:

@kavitha - 我强烈建议您立即重新生成您的存储帐户密钥,因为您在代码中发布了它(这意味着全世界现在都可以访问您的存储帐户)。你永远不应该这样做。另外:编辑您的问题 - 不要更新答案中的信息。 @kavitha - 即使你编辑了帖子(我也编辑了),历史仍然存在,任何有足够声誉的人都可以看到所有历史记录并且仍然看到你的密钥。您需要删除此答案更改您的存储帐户密钥。 @david:感谢您的信息。我已经重新生成了我的存储帐户密钥 @david:你能建议我如何直接从 azure 存储 blob 容器中读取 excel 文件。 这意味着以 32 位运行应用程序。

以上是关于需要通过oledb连接从azure存储blob容器中读取excel文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nodejs 将文件从 Azure 存储 blob(容器)复制到 Azure 文件共享

如何使用 c# 从 azure blob 存储中检索 xml 文件

如何通过 API 调用从 azure 容器中获取 blob 数据?

如何通过 IOT 集线器从 Xamarin PCL 项目将文件上传到 azure Blob 存储

从 blob 容器中删除文件夹

在 azure blob 子容器中从本地上传 zip