mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Fix Invoke-RestMethod to support read-only files in multipart form data (#26454)
This commit is contained in:
+1
-1
@@ -1995,7 +1995,7 @@ namespace Microsoft.PowerShell.Commands
|
||||
/// <param name="file">The file to use for the <see cref="StreamContent"/></param>
|
||||
private static StreamContent GetMultipartFileContent(object fieldName, FileInfo file)
|
||||
{
|
||||
StreamContent result = GetMultipartStreamContent(fieldName: fieldName, stream: new FileStream(file.FullName, FileMode.Open));
|
||||
StreamContent result = GetMultipartStreamContent(fieldName: fieldName, stream: new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read));
|
||||
|
||||
result.Headers.ContentDisposition.FileName = file.Name;
|
||||
result.Headers.ContentDisposition.FileNameStar = file.Name;
|
||||
|
||||
@@ -1727,6 +1727,26 @@ Describe "Invoke-WebRequest tests" -Tags "Feature", "RequireAdminOnWindows" {
|
||||
$result.Files[0].Content | Should -Match $file1Contents
|
||||
}
|
||||
|
||||
It "Verifies Invoke-WebRequest -Form supports read-only file values" {
|
||||
# Create a read-only test file
|
||||
$readOnlyFile = Join-Path $TestDrive "readonly-test.txt"
|
||||
"ReadOnly test content" | Out-File -FilePath $readOnlyFile -Encoding utf8
|
||||
Set-ItemProperty -Path $readOnlyFile -Name IsReadOnly -Value $true
|
||||
|
||||
$form = @{TestFile = [System.IO.FileInfo]$readOnlyFile}
|
||||
$uri = Get-WebListenerUrl -Test 'Multipart'
|
||||
$response = Invoke-WebRequest -Uri $uri -Form $form -Method 'POST'
|
||||
$result = $response.Content | ConvertFrom-Json
|
||||
|
||||
$result.Headers.'Content-Type' | Should -Match 'multipart/form-data'
|
||||
$result.Files.Count | Should -Be 1
|
||||
|
||||
$result.Files[0].Name | Should -BeExactly "TestFile"
|
||||
$result.Files[0].FileName | Should -BeExactly "readonly-test.txt"
|
||||
$result.Files[0].ContentType | Should -BeExactly 'application/octet-stream'
|
||||
$result.Files[0].Content | Should -Match "ReadOnly test content"
|
||||
}
|
||||
|
||||
It "Verifies Invoke-WebRequest -Form sets Content-Disposition FileName and FileNameStar." {
|
||||
$ContentDisposition = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("attachment")
|
||||
$ContentDisposition.FileName = $fileName
|
||||
@@ -3568,6 +3588,25 @@ Describe "Invoke-RestMethod tests" -Tags "Feature", "RequireAdminOnWindows" {
|
||||
$result.Files[0].Content | Should -Match $file1Contents
|
||||
}
|
||||
|
||||
It "Verifies Invoke-RestMethod -Form supports read-only file values" {
|
||||
# Create a read-only test file
|
||||
$readOnlyFile = Join-Path $TestDrive "readonly-test.txt"
|
||||
"ReadOnly test content" | Out-File -FilePath $readOnlyFile -Encoding utf8
|
||||
Set-ItemProperty -Path $readOnlyFile -Name IsReadOnly -Value $true
|
||||
|
||||
$form = @{TestFile = [System.IO.FileInfo]$readOnlyFile}
|
||||
$uri = Get-WebListenerUrl -Test 'Multipart'
|
||||
$result = Invoke-RestMethod -Uri $uri -Form $form -Method 'POST'
|
||||
|
||||
$result.Headers.'Content-Type' | Should -Match 'multipart/form-data'
|
||||
$result.Files.Count | Should -Be 1
|
||||
|
||||
$result.Files[0].Name | Should -Be "TestFile"
|
||||
$result.Files[0].FileName | Should -Be "readonly-test.txt"
|
||||
$result.Files[0].ContentType | Should -Be 'application/octet-stream'
|
||||
$result.Files[0].Content | Should -Match "ReadOnly test content"
|
||||
}
|
||||
|
||||
It "Verifies Invoke-RestMethod -Form sets Content-Disposition FileName and FileNameStar." {
|
||||
$ContentDisposition = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("attachment")
|
||||
$ContentDisposition.FileName = $fileName
|
||||
|
||||
Reference in New Issue
Block a user