URL u=new URL("telnet://route-server.exodus.net");
这一行代码产生了:
java.net.MalformedURLException: unknown protocol: telnet
我遇到了另外一些以"news://"开头的 URL,也出现了类似的问题。
这些 URL 是从 ODP 中提取的,所以我不明白为什么会出现这样的异常情况。
URL u=new URL("telnet://route-server.exodus.net");
这一行代码产生了:
java.net.MalformedURLException: unknown protocol: telnet
我遇到了另外一些以"news://"开头的 URL,也出现了类似的问题。
这些 URL 是从 ODP 中提取的,所以我不明白为什么会出现这样的异常情况。
如果图像URL以"data"开头,则意味着图像数据嵌入在HTML页面中,而不是存储在可以通过URL访问的远程服务器上。因此,您无法使用标准HTTP连接下载图像。因此,base64机制对我们有所帮助。
图像源URL:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAWAUNoinFRBWASIUA........AAAAElFTkSuQmCC
要下载图像,可以使用以下代码:
// Get the image source data
String imageData = webElement.getAttribute("src");
// Extract the image data and file extension from the data URL
String[] parts = imageData.split(",");
String mimeType = parts[0].split(":")[1];
String base64Data = parts[1];
String fileExtension = "";
if (mimeType.equals("image/jpeg")) {
fileExtension = ".jpg";
} else if (mimeType.equals("image/png")) {
fileExtension = ".png";
} else if (mimeType.equals("image/gif")) {
fileExtension = ".gif";
} else {
// Unsupported image format
throw new IOException("Unsupported image format");
}
// Set the output file path and stream. Here, we save the image file.
String outputPath = "C:/images/image" + fileExtension;
FileOutputStream outputStream = new FileOutputStream(outputPath);
// Close the output stream
outputStream.close();
这段代码首先从"data" URL中提取图像数据,并将其分割成MIME类型和base64编码的数据组件。然后根据MIME类型确定文件扩展名,并在解码base64编码的图像数据后将图像保存到磁盘上的文件中。请注意,在解码和文件I/O过程中可能会出现任何异常,您需要处理这些异常。
要使用此代码,除了我在之前的答案中提到的类之外,还需要导入以下类:
import java.io.File;
import java.util.Base64;
java.util.Base64类用于解码base64编码的图像数据。java.io.File类用于表示磁盘上的输出文件。
我希望这可以帮助到某些人!