我正在使用@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
上传文件时是否可以保留文件夹结构?
答案 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