You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DownloadManager获取响应头Content-Disposition中的文件名?

关于DownloadManager处理Content-Disposition文件名的问题

首先明确告诉你:DownloadManager原生就支持自动识别响应头中的Content-Disposition字段来设置下载文件名,完全不需要你手动去获取这个响应头,也不会额外发起HEAD请求,完美匹配你的需求。

具体来说,当你创建DownloadManager.Request并传入目标URL后,DownloadManager在执行下载流程时,会在发起的下载请求中自动解析服务器返回的响应头。如果响应头里包含Content-Disposition(常见格式如attachment; filename="document.pdf"),它会自动提取其中的文件名作为最终保存的文件名,而不会默认使用URL路径的最后一段。

举个简单的代码示例:

// 获取DownloadManager实例
val downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
// 创建下载请求,只需传入目标URL,无需手动设置文件名
val request = DownloadManager.Request(Uri.parse("https://your-domain.com/your-resource"))
// 可选:添加其他配置,比如允许在移动网络下载、设置通知等
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
// 入队开始下载
val downloadId = downloadManager.enqueue(request)

这里需要强调的是:DownloadManager内部只会发起一次下载请求(通常是GET),在获取响应头的同时就开始下载内容,不会单独发送HEAD请求去提前获取文件名——这正好解决了你不想增加服务器访问量、且没有HEAD调用能力的痛点。

只有当响应头中没有Content-Disposition字段时,DownloadManager才会降级使用URL路径的最后一段作为文件名。

内容的提问来源于stack exchange,提问作者adnaan.zohran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:14