我们有一个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."
答案 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)