2012-09-17 23 views
30

Zaten resmin nerede olduğunu biliyorum, ancak sadelik için JSoup'un kendisini kullanarak görüntüyü indirmek istedim. Ben JSoup ve üzeri cevabını bulmadan önce(nasıl) JSoup kullanarak bir görüntü indirebilirim?

//Open a URL Stream 
Response resultImageResponse = Jsoup.connect(imageLocation).cookies(cookies).ignoreContentType(true).execute(); 

// output here 
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new java.io.File(outputFolder + name)); 
//BufferedWriter out = new BufferedWriter(new FileWriter(outputFolder + name)); 
out.write(resultImageResponse.body());   // resultImageResponse.body() is where the image's contents are. 
out.close(); 
+3

public static String storeImageIntoFS(String imageUrl, String fileName, String relativePath) { String imagePath = null; try { byte[] bytes = Jsoup.connect(imageUrl).ignoreContentType(true).execute().bodyAsBytes(); ByteBuffer buffer = ByteBuffer.wrap(bytes); String rootTargetDirectory = IMAGE_HOME + "/"+relativePath; imagePath = rootTargetDirectory + "/"+fileName; saveByteBufferImage(buffer, rootTargetDirectory, fileName); } catch (IOException e) { e.printStackTrace(); } return imagePath; } public static void saveByteBufferImage(ByteBuffer imageDataBytes, String rootTargetDirectory, String savedFileName) { String uploadInputFile = rootTargetDirectory + "/"+savedFileName; File rootTargetDir = new File(rootTargetDirectory); if (!rootTargetDir.exists()) { boolean created = rootTargetDir.mkdirs(); if (!created) { System.out.println("Error while creating directory for location- "+rootTargetDirectory); } } String[] fileNameParts = savedFileName.split("\\."); String format = fileNameParts[fileNameParts.length-1]; File file = new File(uploadInputFile); BufferedImage bufferedImage; InputStream in = new ByteArrayInputStream(imageDataBytes.array()); try { bufferedImage = ImageIO.read(in); ImageIO.write(bufferedImage, format, file); } catch (IOException e) { e.printStackTrace(); } 

}. [FileUtils # copyURLToFile] (http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html). – Sorter

cevap

38

Hatta soruyu yazarken bitiremedi: Bu defa ne var

(Bu vs. alma çerezleri, yönlendirme, basitleştirmek olan) küçük deneyler.

//Open a URL Stream 
Response resultImageResponse = Jsoup.connect(imageLocation).cookies(cookies) 
             .ignoreContentType(true).execute(); 

// output here 
FileOutputStream out = (new FileOutputStream(new java.io.File(outputFolder + name))); 
out.write(resultImageResponse.bodyAsBytes()); // resultImageResponse.body() is where the image's contents are. 
out.close(); 
+3

Açıklama: Görüntüler karakter verisi değil, ikili veridir. 'Response # body()' bir 'String' döndürür, bunun yerine raw bayt dizisini almalısınız. Ayrıca, bir "Yazar" kullanılarak baytları karakterlere dönüştürür, 'OutputStream''e yapışmalısınız. – BalusC

+0

Aslında başlangıçta birçok sayımda yanılmışım. En azından, umarım hemen cevap yazarak sınırlarıma aşmadım: -p En azından bu sitede herhangi bir yerde böyle bir şey bulamadım. –

+1

Teşekkürler @BalusC! Bu diğer cevaplar bana yardımcı oldu: nasıl [resim bayt JSoup] almak (http://stackoverflow.com/a/12663619/519951) ve [byte dizisi dosya kaydetmek] (http://stackoverflow.com/questions/1580038/byte-array-to-image-file) – ruhong

1

Basitçe kullanabilirsiniz bu yöntemlerdir-sen bu bir astar ile jsoup olmadan bunu yapabilir

İlgili konular