Set-AzureStorageBlobContent将所有文件放在根目录下

时间:2019-07-11 07:38:00

标签: azure azure-devops azure-storage azure-storage-blobs

我正在使用@Autowired将文件上传到我的Blob:

Set-AzureStorageBlobContent

这可行,但是foreach ($file in Get-ChildItem -Path $path -File -Recurse) { Set-AzureStorageBlobContent -Blob $file.Name -Container $container -File $file.FullName -Context $context -Properties $prop -Force } 文件夹中子文件夹中的所有文件都放在存储Blob的根文件夹中。

例如,在我的$path目录(源文件)中,我有一个名为$path的文件夹,该文件夹中有我的图像graphic,因此结构为:

image1.png

当我运行graphic image1.png index.html 任务时,它会将Set-AzureStorageBlobContent上载到根文件夹中,而不是创建一个image1.png文件夹并将其放置在其中。

使用graphic上传文件时是否可以保留文件夹结构?

2 个答案:

答案 0 :(得分:1)

实际上,我在先前的回答中已经提到过。

这是由于-Blob $file.Name引起的,例如,如果文件a.txt位于d:\temp\sub\a.txt上,则$ file.name是a.txt。因此,当使用cmdlet Set-AzureStorageBlobContent上传到Blob定子时,它始终位于根文件夹中。

解决方案是您应该为sub\a.txt参数传递a.txt而不是-Blob

首先,为本地文件夹的根路径定义一个变量,例如$path = "D:\temp\",然后为Set-AzureStorageBlobContent的-Blob参数使用-Blob $_.FullName.Replace($path,'')

然后您可以在azure门户上对其进行检查,文件a.txt应该位于root/sub/a.txt

答案 1 :(得分:0)

像伊万一样,问题在于-Blob的值。我最终使用了稍微不同的解决方案。由于FullName值是这样的:

D:\a\r1\a\_ClientWeb-Build-CI\ShellArtifact\out\build\graphic\email-empty.svg

我使用了.split()函数来获取所需的子文件夹:

-Blob $file.FullName.split('\', 9)[8]
  

graphic \ email-empty.svg

完整的命令:

Set-AzureStorageBlobContent -Blob $file.FullName.split('\', 9)[8] -Container $container -File $file.FullName -Context $context -Properties $prop -Force