我想在 foreach 循环中使用 invoke-restmethod 通过 Infile 参数上传多个文件
I want to use the invoke-restmethod in a foreach loop to upload a multiplefiles through Infile parameter
每次循环执行时,文件都被替换为第一个文件的位置。我想在不破坏现有文件的情况下将其作为新文件上传..
foreach ($blob in $blobs)
{
$file=New-TemporaryFile
$file=Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile -Force
$contents = Get-Content $localFile -Raw -ErrorAction:SilentlyContinue
$f=New-TemporaryFile
Add-Content $f $contents
$Header = @{
"Content-Disposition"="attachment;filename=$($blob.Name)"
"Authorization"=$accessToken
}
Invoke-RestMethod -Uri $apiUrl -Headers $Header -Method put -InFile $f
}
我认为您在代码中使用 New-TemporaryFile
命令过度了。
为什么要使用 Get-AzureStorageBlobContent
将 blob 内容存储在一个文件中,然后创建另一个临时文件以将内容复制到其中?
这样会简单得多:
foreach ($blob in $blobs) {
$localFile = New-TemporaryFile
Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile.FullName -Force
$Header = @{
"Content-Disposition"="attachment;filename=$($blob.Name)"
"Authorization"=$accessToken
}
Invoke-RestMethod -Uri $apiUrl -Headers $Header -Method put -InFile $localFile.FullName
}
编辑
New-TemporaryFile
命令 returns 一个 System.IO.FileInfo
对象,您不能直接将其用作 InFile
参数。相反,它需要一个完整的路径和文件名,所以我们使用 $localFile.FullName
每次循环执行时,文件都被替换为第一个文件的位置。我想在不破坏现有文件的情况下将其作为新文件上传..
foreach ($blob in $blobs)
{
$file=New-TemporaryFile
$file=Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile -Force
$contents = Get-Content $localFile -Raw -ErrorAction:SilentlyContinue
$f=New-TemporaryFile
Add-Content $f $contents
$Header = @{
"Content-Disposition"="attachment;filename=$($blob.Name)"
"Authorization"=$accessToken
}
Invoke-RestMethod -Uri $apiUrl -Headers $Header -Method put -InFile $f
}
我认为您在代码中使用 New-TemporaryFile
命令过度了。
为什么要使用 Get-AzureStorageBlobContent
将 blob 内容存储在一个文件中,然后创建另一个临时文件以将内容复制到其中?
这样会简单得多:
foreach ($blob in $blobs) {
$localFile = New-TemporaryFile
Get-AzureStorageBlobContent -Container $container_name -Blob $blob.Name -Context $ctx -Destination $localFile.FullName -Force
$Header = @{
"Content-Disposition"="attachment;filename=$($blob.Name)"
"Authorization"=$accessToken
}
Invoke-RestMethod -Uri $apiUrl -Headers $Header -Method put -InFile $localFile.FullName
}
编辑
New-TemporaryFile
命令 returns 一个 System.IO.FileInfo
对象,您不能直接将其用作 InFile
参数。相反,它需要一个完整的路径和文件名,所以我们使用 $localFile.FullName