求解 JAVA SE 中图片下载问题--- 谢谢!

芮淼一线 发布于 2015/05/21 21:40
阅读 236
收藏 0


         我想从一个URL图片地址中下载一个图片(代码如下) , 为什么总是不成功呢?

        在 in= con.getInputStream(); 语句处总会抛出一个异常,如果把这个URL地址换成一个普通的 网页地址,就能把这个网页中的数据下载下来。

        这是为什么?

        请帮我解释一下,我错在哪里 , 能帮我改改代码最好(尽量在我的代码的基础上修改)。

        ps:(为什么有的图片能下载下来,但是一些图片禁止外链的提示,而不是与URL想对应的图片)

        ps2:(为什么有些图片下载会出现盗链提示,而用浏览器却能正常的下载,这是为什么?求大神给个解决方案)

        有时候又会有防盗链图片被下载(如下图:),怎样解决这个问题??

        真心感谢!


代码 MakeImage.java

//代码 MyDown.java

下载的盗链图片:


加载中
0
迷路的游侠
迷路的游侠
加个Referer试试
芮淼一线
芮淼一线
怎么加这个啊,给我段代码提示。
0
Helloall
Helloall

你好,你的代码是正常的,我还亲自在Ubuntu下测试,确认是无误的。建议你换个图片地址进行下载。我用的是Firefox官方的图片。

我测试的地址:

String urlImage = "https://mozorg.cdn.mozilla.net/media/img/home/voices/firefox-logo-wordmark-white.de059cc90a4e.png";
String urlFile = "/home/user/p123.png";

源码:

package pic;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

public class MyDown {
	URL url;
	URLConnection con;
	InputStream in;
	OutputStream out;
	public void downpic(String Img, String File){
		try{
			url = new URL(Img);
			con = url.openConnection();
		}catch (Exception e)
		{
			
		}
		byte  [] date = new byte[1024*4];
		int length;
		try{
			in = con.getInputStream();
			out = new FileOutputStream(File);
			
		}catch(Exception e){
			
		}
		try{
			while((length = in.read(date))!=-1)
			{
				out.write(date,0,length);
			}
			in.close();
			out.close();
		}catch(Exception e){
			
		}
	}
}



package pic;

public class MakeImage {
	public static void main(String []args){
		String urlImage = "https://mozorg.cdn.mozilla.net/media/img/home/voices/firefox-logo-wordmark-white.de059cc90a4e.png";
		String urlFile = "/home/user/p123.png";
		new MyDown().downpic(urlImage, urlFile);
		
	}
}



芮淼一线
芮淼一线
回复 @Helloall : 那为什么使用下载器能下载,这个应该跟cookie没有关系了把,而且添加一个 referer 头也不行啊。
Helloall
Helloall
回复 @芮淼一线 : 你清空浏览器缓存,然后直接在地址栏输入那张图片的网址,肯定是打不开的,打开看到的跟你下载的防外链是一样的,这个设置在Apache服务器是可以很容易设置的。。
芮淼一线
芮淼一线
回复 @Helloall : 但用浏览器就可以加载那些图片啊!
Helloall
Helloall
回复 @芮淼一线 : 你只能下载那些公开不设限制的图片,那些设置了防外链引用是无法下载的,很正常啊。
芮淼一线
芮淼一线
我试过多个图片源,但有很多都会抛出异常无法下载,而有的图片能下载,但是下载下来的是网站的防盗链图片,不是它真正的图片,然而用浏览器打开那些图片链接都能正常的显示图片。
返回顶部
顶部