将base64字符串转换为文件

32
我试图将Base64字符串转换回原始文件。 我尝试导出这些文件的应用程序只允许我以Base64字符串的形式导出。 导出会返回Base64字符串和文件类型。
如何将这些字符串转换回原始文件? 我一直在尝试类似这样的方法,但我不认为这对于不同类型的文件有效?
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($file)) |
    Out-File C:\ID\document.$($extension)

有人可以给我一些如何做到这一点的想法吗?

1个回答

67

FromBase64String() 方法将一个 base64 编码的字符串转换为字节数组。你只需要将该字节数组写回到文件即可:

$b64      = 'AAAAAA...'
$filename = 'C:\path\to\file'

$bytes = [Convert]::FromBase64String($b64)
[IO.File]::WriteAllBytes($filename, $bytes)

它对我来说就像是魔法一样,我曾经苦苦挣扎了数小时,感谢老板。 - Amnesh Goel
3
在我的情况下,Base-64 文本太长了,无法直接粘贴到 PowerShell 窗口中,所以我不得不使用 $b64 = Get-Content "filePath" 这个命令。 - Origin
2
不要犯和我一样的错误,WriteAllBytes函数在没有给定绝对路径的情况下会默默地失败。 - jkmartindale
@jkmartindale 我猜它把所有字节写入了Powershell.exe进程的Win32当前目录,这不一定与Powershell的当前位置相同。System.IO方法都使用当前进程的当前目录来处理相对路径。尝试在System32文件夹中搜索它。 - Peter Lindgren
可以使用以下调用查找进程的当前目录: [System.IO.Directory]::GetCurrentDirectory() - Peter Lindgren
WriteAllBytes在参数为相对路径时会失败。只是它将文件写入了工作目录之外的目录。对我来说,这就是Linux中所称的$HOME(在Windows中为/users/me/)。 - steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接