我有很多zip文件,其中包含少量文件夹和50多个文件。如何将这些zip文件上传到azure blob然后在那里解压缩。
解压缩服务器中的文件并将其中的文件逐个上传到azure blob将是一个繁琐的过程。
azure有没有简单的方法来实现这一目标,还是有任何解决方法?
我在PHP中实现了这一点。
答案 0 :(得分:3)
简单的答案是Azure Blob Storage不会为您解压缩。这是你需要自己做的事情。你是怎么做的取决于你。
有一种可能性(就像你提到的那样)你在服务器上传zip文件,将它们解压缩然后上传单个文件。
如果您担心Web服务器上发生的处理,另一种可能性是通过后台进程解压缩。在这种方法中,您只需在blob存储中上传zip文件。然后通过一些后台进程(可能是WebJobs,函数,工作者角色或虚拟机),您可以下载这些zip文件,解压缩然后重新上载这些单独的文件。
要按需触发后台进程,一旦上传了zip文件,您只需在队列中写入一条消息,告知后台进程下载zip文件并开始解压缩过程。
答案 1 :(得分:2)
因为你的概率。已经在互联网上找到了,在存储服务器内部运行工作负载是不可能的......但是: 您可以为您编写azure function to FileWatch your storage account并解压缩文件,然后上传
答案 2 :(得分:2)
AS @Gaurav提到,解压缩并不是天真的支持。有一个feedback item将此作为功能包含在内,但它被拒绝了。我可以想到两个可能感兴趣的替代方案。
1)构建执行解压缩的Azure数据工厂custom activity。当文件上传到临时位置时,您可以在管道中解压缩并将它们写入应用程序容器。这将需要批处理服务实例,但Data Factory将负责所有业务流程并为您提供管理工具以警告故障等。
2)使用adlcopy.exe将blob从Azure Blob存储移动到Azure Data Lake Store。进入Data Lake Storage后,您可以构建自己的custom extractor并查询zip / gzip文件。看完文档之后,似乎USQL本身可以做到这一点。在EXTRACT expression中查找从压缩数据中提取部分。
3)将PolyBase与SQL数据仓库配合使用,可以本地读取zip / gzip文件。这是最简单但可能是最昂贵的选择。请参阅CREATE EXTERNAL TABLE和CREATE EXTERNAL FILE FORMAT。
4)正如@EvertonMc刚刚提到的那样,你可以在触发器上使用Azure功能来实现它,这也是一个不错的选择。
祝你好运,让我们知道你是怎么过的。