我试图将URL中的JPEG图像保存为使用Java的文件。 URL:http://150.214.222.100//axis-cgi/mjpg/video.cgi?resolution=640x480&compression=1&duration=1&timeout=&dummy=garb如何将JPEG从URL保存到文件?
我尝试以下: 1)
Image image = fetchImage(urlNorthView);
saveImage2Disk(image);
public static Image fetchImage(URL u) throws MalformedURLException, IOException {
Toolkit tk = Toolkit.getDefaultToolkit();
return tk.createImage(u);
}
private void saveImage2Disk(Image Image) throws IOException{
File outputFile = new File("urlNorthView"+Calendar.getInstance().getTimeInMillis()+".jpg");
BufferedImage bufferedImage = new BufferedImage(Image.getWidth(null),Image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(Image, null, null);
ImageIO.write(bufferedImage, "jpg", outputFile);
}
=>异常: “宽度(-1)和高度(-1)不能< = 0”
2 )
inputStream2Disk((InputStream) urlNorthView.getContent());
private void inputStream2Disk(InputStream in) throws Exception{
File outputFile = new File("urlNorthView"+Calendar.getInstance().getTimeInMillis()+".jpg");
OutputStream out=new FileOutputStream(outputFile);
byte buf[]=new byte[1024];
int len;
while((len=in.read(buf))>0)
out.write(buf,0,len);
out.close();
in.close();
}
该文件不知何故被破坏。当我与Kate打开它,我可以读:
--myboundary内容类型:图像/ JPEG内容长度:38256 ....
不应该有在任何文本二进制文件。
问题是什么?
注意:第二种方法得到的是从URL中检索的* full *内容 - 包括标题,其中包含信息关于服务器发回的内容。 (通常,我们使用浏览器查看互联网上的项目,浏览器将解释标题以供自己使用,并仅向我们显示内容。) – Arkaaito 2010-02-13 09:09:43
这些不是http标题,它们是mime标题。它们并不存在于绝大多数http响应中,但在这种情况下它们是http响应主体的一部分。请参阅下面的回复。如果您的浏览器使用给定的URL显示图像,这是因为它足够聪明来解析MIME部分。 – 2010-02-13 09:32:35