在有效 URL 上获取“MalformedURLException:无协议”

问题描述 投票:0回答:1

我正在尝试使用签名 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..."
java android url https malformedurlexception
1个回答
0
投票

在浏览器中查看生成签名 URL 的 PHP 脚本后,我发现它输出的是双引号内的 URL。

手动删除 Java 中的双引号解决了问题:

URL url = new URL(signedUrl.replace("\"", ""));
© www.soinside.com 2019 - 2024. All rights reserved.