如何从java中的url下载图像?

Posted

技术标签:

【中文标题】如何从java中的url下载图像?【英文标题】:How to download image from from url in java? 【发布时间】:2017-01-31 04:15:04 【问题描述】:

我一直在尝试通过 java 从 url 下载图像。 我尝试了很多方法来解决它,但我没有成功。

我正在写我的方式,希望有人能找到问题所在:

使用第一种和第二种方法时,我在尝试打开图像时收到以下错误:

...文件似乎已损坏、损坏或太大

...它的大小比它应该的要小。

我猜这与编码有关。

第一种方式:

URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg");
InputStream in = url.openStream();
Files.copy(in, Paths.get("someFile.jpg"), StandardCopyOption.REPLACE_EXISTING);
in.close();

第二种方式:

File f= new File("c:\\image.jpg");
URL myUrl = new URL("http://www.avajava.com/images/avajavalogo.jpg");
FileUtils.copyURLToFile(myUrl, f);

使用方式 3 我在thread "main" java.lang.IllegalArgumentException: image == null! 中得到异常

第三种方式:

URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg");
BufferedImage img = ImageIO.read(url);
File file = new File("downloaded.jpg");
ImageIO.write(img, "jpg", file);

我真的需要你的帮助!!!很久以前我一直在尝试解决它,但没有成功。

提前致谢!!!

【问题讨论】:

在这里查看this。这将帮助你 第一种方法适合我 请在此处附上您从第一个案例下载的文件,以便我们验证它是否真的损坏了。另外,我会尝试通过其他方式下载它并对其进行比较,然后通过 java 下载一个以查看差异是什么 图像只是二进制内容而已。知道第一个适用于任何类型的内容(二进制或非二进制),它也适用于图像 我唯一能做的就是使用 try-with-resources 语句来关闭你的流,无论发生什么,就像这个答案***.com/a/32472138/1997376 【参考方案1】:

您必须在方式 3 中指定目标文件的完整位置:

URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg");
BufferedImage img = ImageIO.read(url);
File file = new File("D:\\image\\downloaded.jpg");
ImageIO.write(img, "jpg", file);

【讨论】:

【参考方案2】:

发生这种情况时,您尝试下载的图像通常位于占位符内。占位符用于在所有浏览器或任何有价值的方法中为图像提供一些漂亮的黑色背景..

尝试使用任何文本编辑器打开您下载的一张小尺寸图片。您可能会惊讶地看到您假设的图像中有一个 html 代码。此 HTML 代码将有几行,通常是背景颜色标记和图像真实 URL。这是您必须包含在代码中才能下载完整图像的 URL。

这可能是您实际下载的 avajavalogo.jpg 文件的示例:

<!DOCTYPE html>
<html>
<body style="background-color:#0e0e0e;">
<center><img src="http://www.myhostsiteisgreat.com/image_real_location_url/awesome_image.jpg" border="0" onclick="javascript: window.close();" ></center>
</body>
</html>

如果您尝试使用图像编辑器打开此文件,则会引发错误(错误的标题、错误的格式等)并且图像将无法打开。您在问题中显示的图像不是这种情况,但可能是您实际尝试下载的图像的情况。

除此之外,公开的方法都是有效的。

【讨论】:

以上是关于如何从java中的url下载图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器下载图像如果使用Asynctask存储在ArrayList中的URL?

如何从 URL 下载图像

如果使用 Asynctask 将 URL 存储在 ArrayList 中,如何从服务器下载图像?

如何从 UITableViewCell 中的 URL 为 UIImageView 设置图像?

coverflow android:如何从coverflow中的url获取图像

如何从 URL 下载文件并将其保存在 Rails 中?