我正在尝试使用签名 URL 访问和下载托管在 Google Cloud Storage 上的图像,但如果我将签名 URL 字符串作为参数传递,则会抛出 MalformedURLException。我知道这是一个有效的 URL,因为可以将其粘贴到我的浏览器中。
这不起作用:
URL url = new URL(signedUrl);
但是,将
System.out.println(signedUrl)
的输出粘贴到 URL 对象中确实有效。
System.out.println(signedUrl);
URL url = new URL("https://storage.googleapis.com/rydr/insurance_documents/test123.png?X...");
例外:
java.lang.RuntimeException: java.net.MalformedURLException: no protocol: "https://storage.googleapis.com/rydr/insurance_documents/test123.png?X..."
几年前,一位 StackOverflow 用户也遇到了类似的问题这里,但是使用
.trim()
的建议未能为我解决问题。
我也尝试使用 DownloadManager,但它抛出了类似的异常:
java.lang.IllegalArgumentException: Can only download HTTP/HTTPS URIs: "https://storage.googleapis.com/rydr/insurance_documents/test123.png?X..."
在浏览器中查看生成签名 URL 的 PHP 脚本后,我发现它输出的是双引号内的 URL。
手动删除 Java 中的双引号解决了问题:
URL url = new URL(signedUrl.replace("\"", ""));