在Java中将HTML图像URL转换为数据URI

时间:2016-06-08 07:21:20

标签: java html uri

我有一些自定义代码可以将.HTML文件传送到服务器的磁盘,我希望能够修改该代码,以便将所有图像引用从普通URL(即http://example.com/image.jpg)更改为Base64编码的数据URI。 / p>

如何在Java中解析此输出(.html文件)并将所有img src更改为数据URI?

HTML基本上是一封电子邮件,因此可能就像:

    <html>
       <body>
          <img src="http://www.google.co.uk/images/nav_logo242.png">
       </body>
    </html>

它需要用Base64数据URI替换所有img src=

我的输入HTML电子邮件已经作为我们的交付流程的一部分进行了Base64编码,因此我只能解码和重新编码。我完全不知道如何将参考图像换成数据URI。

  

更新

我已经取得了一些进展,现在这需要并输入和吐出我所追求的东西。我遇到的问题是网站何时是HTTP网站,然后必须重定向到HTTPS。这使得代码失败了。

package embedimages;

import com.github.kevinsawicki.http.HttpRequest;
import java.io.ByteArrayOutputStream;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class EmbedImages {

    public static void main(String[] args) throws java.lang.Exception {

        boolean debug = false;

        String HTMLSTring = "<!DOCTYPE html>" + "<html>" + "<head>" + "<title>Example</title>" + "</head>" + "<body>" + "<table><tr><td><h1>HelloWorld</h1></tr>" + "</table>" + "<img src=\"http://ichef.bbci.co.uk/news/660/cpsprodpb/025B/production/_85730600_monkey2.jpg\">" + "</body>" + "</html>";

        if (debug) {
            System.out.println(HTMLSTring);
        }

        Document doc = Jsoup.parse(HTMLSTring, "UTF-8");

        for (Element element : doc.select("img")) {
            String src = element.attr("src");
            if (debug) {
                System.out.println("Parsed src is: " + src);
            }

            if (src != null && !src.startsWith("data:")) {

                HttpRequest request = HttpRequest.get(src);
                request.trustAllCerts();
                request.trustAllHosts();
                if (debug) {
                    System.out.println("Header is: " + request.headers());
                }

                if (debug) {
                    System.out.println("Status is: " + request.code());
                }

                if (request.ok()) {
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();

                    request.receive(baos);
                    String mimeType = request.contentType();

                    if (debug) {
                        System.out.println(mimeType);
                    }
                    byte[] b = baos.toByteArray();

                    String encoded = HttpRequest.Base64.encodeBytes(b);
                    String dataURI = "data:" + mimeType + ";base64," + encoded;
                    if (debug) {
                        System.out.println(dataURI);
                    }

                    element.attr("src", dataURI);

                } else {

                    if (debug) {
                        System.out.println("FAIL");;
                    }
                }
                doc.outputSettings().prettyPrint(true);

                if (debug) {
                    System.out.println(doc.html());
                }

            }
        }

    }
}

0 个答案:

没有答案