为什么使用 wget 获取图像会返回一个文件,而不是图像?

为什么使用 wget 获取图像会返回一个文件,而不是图像?

我愿意

wget http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2

并下载以下文件:

3809_obj_sprite.gif?id=2

我怎样才能使其保存为如下所示?

2.png

答案1

为什么wget选择这个名字?

不幸的是,wget除非您告诉它,否则它不会对您想要下载的内容做出任何假设。它不关心您的文件是图像、文档、压缩文件还是其他。

文件将以 URL 结尾的任何内容保存 - 因此从最后一个斜杠到 URL 末尾的任何内容。 在您的例子中,这是.gif?id=2。 实际文件扩展名 ( ) 之后的部分.gif包含在 URL 中,但它是HTTP 查询参数.wget但是,对于 ,它将决定输出文件名。

我如何设置不同的文件名?

如果要指定输出文件名wget,请添加-O(大写 O)选项:

wget example.com/something.gif?id=2 -O 2.gif

这将覆盖默认行为并将文件名设置为2.gif。请注意,-o(小写)选项指定任何日志消息的输出文件名,wget否则可能会打印到 shell。

最后,还有一个--content-disposition选项可能导致设置正确的文件名。但这完全取决于您下载的服务器是否发送了正确的标头信息:

该选项对于一些使用 Content-Disposition 标头来描述下载文件的名称的文件下载 CGI 程序很有用。

该选项目前仍标记为实验性的,因此默认未启用。


我强烈建议你阅读你使用的工具的手册页,以了解它们的行为。只需输入man wget并通读它,特别是它提供的选项。

此外,为了解决 @Indrek 所写的问题对你的问题的评论:我猜你那里打错了,并不是要将 GIF 文件下载到名为的文件中.png— — 只需更改扩展名即可不是自动将其转换为 PNG。GIF 和 PNG 使用不同的编码,您必须使用任何类型的图像转换工具来在这些格式之间进行转换。但是,这种转换是无损的,因此下载“错误”格式的文件并稍后进行转换不会造成任何损害。

答案2

有一个命令行选项--content-disposition- 如果网站提供了正确的标题 - 应该会导致您的文件以正确的名称保存。

我的 Debian 压缩盒显示该选项是“实验性的”......

答案3

这只是因为看路径,它以?id=2 结尾,因此它会保存为此,您可以移动文件或使用 -O 参数定义文件名。

答案4

curl还可以选择从Content-Disposition标题猜测文件名:

curl -OLJ http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2

这里

-O告诉 curl 保存到文件而不是刷新到 stdout
-L使其遵循重定向
-J,通过猜测Content-Disposition而不是剖析 URL 来实现

相关内容