.net - 上传损坏但文件大小正确?

标签 .net powershell png

我正在使用 Invoke-Restmethod 尝试将 png 文件上传到 RapidShare,服务器上的文件大小是正确的,但如果我下载文件,它甚至不是图像,这绝对是编码问题,但我不知道是什么我做错了吗?

$FreeUploadServer = Invoke-RestMethod -Uri "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver"
$url = "http://rs$FreeUploadServer.rapidshare.com/cgi-bin/rsapi.cgi"
$fields = @{sub='upload';login='username';password='pass';filename='2he1re.png';filecontent=$(Get-Content C:\libs\test.png -Raw)}

Invoke-RestMethod -Uri $url -Body $fields -Method Post -ContentType "image/png"

我已经尝试了各种方法,有人知道我做错了什么吗?

最佳答案

使用 -Raw 参数读取文件内容仍然返回一个 string 对象,这对于像 PNG 这样的二进制文件来说可能会出现问题。我认为 RapidShare API 需要 URL 编码的表单发布数据。试试这个:

## !! It would be nice if this worked, but it does not - see update below !!
Add-Type -AssemblyName System.Web
$fields = @{sub='upload';login='username';password='pass';filename='2he1re.png';
            filecontent=Get-Content C:\libs\test.png -Enc Byte -Raw}

顺便说一句,我认为您可能希望放弃设置 ContentType。内容类型应该是 application/x-www-form-urlencoded - 我认为。

我找到了 this post有助于了解 HtmlEncode 和 UrlEncode 之间的区别。

更新:当正文采用哈希表形式时,Invoke-RestMethod 似乎是为 POST 对正文进行 URL 编码。那很好。但是它似乎不接受字节数组。它期望哈希表中的每个值都是字符串或可表示为字符串,即它对每个值调用 ToString()。这使得正确编码二进制数据变得具有挑战性。我对 PowerShell 团队有疑问。

好的,想出了一个合理的解决方法。还记得我之前提到过,将 Body 作为字符串传递相当于传递哈希表吗?好吧,事实证明有一个重要的区别。 :-) 当您传入字符串时,cmdlet 不会对其进行 Url 编码。因此,如果我们传入一个字符串,我们就可以绕过我认为是此 cmdlet 的限制(不支持哈希表中的 byte[] 值)。试试这个:

Add-Type -AssemblyName System.Web
$png  = [Web.HttpUtility]::UrlEncode((Get-Content C:\libs\test.png -Enc Byte -Raw))
$body = "sub=upload&login=username&password=pass&filename=2he1re.png&filecontent=$png"
Invoke-RestMethod -Uri $url -Body $body -Method Post

关于.net - 上传损坏但文件大小正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270983/

相关文章:

windows - 是否有内置的 Windows 命令行编辑器?

powershell - Powershell-变量未扩展

actionscript-3 - 使用 AS3 检查 PNG 图像是否包含(半)透明像素

r - 如何将图像叠加到 ggplot 上?

c# - 为什么CancellationTokenSource挂了一个应用

c# - P/Pnvoke SetFocus 到一个特定的控件

javascript - 单击复选框后如何调用 Controller 方法?

rest - 如何从 PSMethod 类型返回有意义的结果

.net - 使用 .net 库自动执行任务的最佳技术是什么?

python - 使用 PIL 加载 RGBA 位图