为什么获取图像会给我一个文件,而不是图像?

Szy*_*oda 6 linux bash wget

我愿意

wget http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2
Run Code Online (Sandbox Code Playgroud)

并下载以下文件:

3809_obj_sprite.gif?id=2
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它保存为以下内容?

2.png
Run Code Online (Sandbox Code Playgroud)

slh*_*hck 38

为什么wget选择这个名字?

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

该文件将保存为 URL 结尾的任何内容 - 所以从最后一个斜杠到 URL 结尾的任何内容。在你的情况下,那就是.gif?id=2。实际文件扩展名 ( .gif)之后的部分包含在 URL 中,但它是一个HTTP 查询参数wget但是,对于,它将确定输出文件名。

如何设置不同的文件名?

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

wget example.com/something.gif?id=2 -O 2.gif
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


我强烈建议您阅读您使用的工具的联机帮助页以了解其行为。只需输入man wget并通读它,尤其是它提供的选项。

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

  • Jarrod,我现在更新了我的答案并明确说明了 OP 可能存在的误解。至于你问为什么这个答案有这么多的赞成票——你是在推断它应该被否决,因为我给了 OP 错误的信息?我从未声称图像不是文件,并且在重命名时 GIF 会神奇地变成 PNG。我认为这是一个错字,因为问题的重点是*文件名*。 (4认同)

dua*_*led 6

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

我的 debian 挤压框它说该选项是“实验性的”,但......