通过Powershell将文件上传到HTTP

时间:2016-07-02 21:42:41

标签: powershell post file-upload

我们有一个php网站,可以将图片上传到服务器,简单的jpg文件和正确的命名。问题是我们需要一次上传几百个,但php一次只接受1个,重命名并上传。我已经在PS中完成了文件操作,但无法上传。

与上传相关的PHP部分(据我所知)看起来像这样:<form name='' id='' enctype='multipart/form-data' method='POST' action='/picture_upload.php' target='_self' onsubmit="default_on_submit(event)">

我在这里检查了谷歌相关主题,并得到了这个:

$uri = "http://example.com/"
$pwd = ConvertTo-SecureString 'MyPassword' -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential ('myuser', $pwd)
$contentType = "multipart/form-data"
    $body = @{
        "FileName" = Get-Content($uploadPath) -Raw
    }
    Invoke-WebRequest -Uri $uri -Method Post -ContentType $contentType -Body $body

我检查过$uploadPath,这是正确的C:\Folder\file.jpg。我使用我用来登录网站的凭据,我可以通过GUI上传这些图片。

我尝试在POST和PUT之间切换,没有任何变化。

http://example.com替换http://example.com/file.jpg也没有任何区别。不确定,这是使用POST的正确方法。

我们公司内部有McAffe网关,但是我在用户旁边运行脚本绕过它,所以它不会造成这种情况。

我收到的当前错误消息是: &#34; Invoke-WebRequest:基础连接已关闭:接收时发生意外错误。&#34;

任何帮助将不胜感激!对不起,如果这已经解决了,我只是错过了一个条目!

P.S。我也试过这个 - Powershell script to Upload log file from local system to http URL,然后返回Exception calling "UploadFile" with "3" argument(s): "An exception occurred during a WebClient request."

2 个答案:

答案 0 :(得分:10)

迟了一年,所以你可能不再需要答案,但对我有用的是:

Invoke-RestMethod -Uri $uri -Method Post -InFile $uploadPath -UseDefaultCredentials

Mine需要使用Windows身份验证作为当前登录的用户... From this other answer,看起来在某些情况下你可以使用-cred,并且必须在其他情况下构建一个Authorization标头。

答案 1 :(得分:0)

即使后来发布,但这些Invoke-RestMethod解决方案(以及其他一些解决方案)对我也不起作用。我的服务端点失败,缺少边界和其他“内容”问题,具体取决于我的尝试和错误。

我尝试使用WebClient的Uploadfile()功能,它对我有用。 幸运的是,它很简洁。

$wc = New-Object System.Net.WebClient
$resp = $wc.UploadFile($uri,$uploadPath)