求助:java.lang.IllegalArgumentException存储Uri解析失败问题
问题排查与解决方案
异常信息
抛出java.lang.IllegalArgumentException,提示信息:"The storage Uri could not be parsed"
相关代码
val storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(bookUrl) // val storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(bookUrl).child("downloadsCount") storageReference.getBytes(Constants.MAX_BYTES_PDF) .addOnSuccessListener { bytes -> Log.d(TAG,"downloadBook : Book downloaded...") saveToDownloadsFolder(bytes) } .addOnFailureListener { e -> progressDialog.dismiss() Log.d(TAG,"downloadBook : Failed to download book due to ${e.message}") Toast.makeText(this,"Failed to download book", Toast.LENGTH_SHORT).show() } }
可能原因
- URL格式不合法:
bookUrl不是Firebase Storage的有效URL,缺少gs://或https://firebasestorage.googleapis.com/这类标准前缀,或者路径格式错误。 - URL内容无效:
bookUrl为空、包含空格/未转义的特殊字符,或者指向的是Firebase其他服务(如Realtime Database)的URL,而非Storage资源。 - Bucket配置不匹配:URL中的存储桶名称与项目中Firebase Storage的配置不一致。
解决方案
校验
bookUrl的有效性
打印bookUrl的实际值,确认其符合Firebase Storage的URL规范:- GS协议格式示例:
gs://your-project-bucket/books/sample.pdf - HTTPS访问链接格式示例:
https://firebasestorage.googleapis.com/v0/b/your-project-bucket/o/books%2Fsample.pdf?alt=media
- GS协议格式示例:
修复URL格式问题
如果bookUrl是从数据库或其他地方获取的存储路径(而非完整URL),改用getReference()方法直接构建引用:// 假设bookPath是存储路径,如"books/sample.pdf" val storageReference = FirebaseStorage.getInstance().getReference(bookPath)清理URL中的无效内容
确保bookUrl没有空格、乱码,若包含特殊字符(如中文、空格),先进行URL编码:val encodedBookUrl = URLEncoder.encode(bookUrl, "UTF-8") val storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(encodedBookUrl)核对Storage配置
检查项目的Firebase控制台中,Storage的存储桶名称与URL中的bucket部分是否一致,确认没有拼写错误。
内容的提问来源于stack exchange,提问作者K Arun
相关产品推荐
相关产品推荐

