使用WWW::Mechanize的:content_file参数下载时如何获取响应返回的文件名
解决方案
当你使用:content_file参数执行流式下载时,WWW::Mechanize仅会将响应体直接写入磁盘、不加载到内存中,并不会丢弃响应的元数据,$mech->response对象仍然完整保留了所有响应头信息,因此你可以直接调用原有方法获取原始文件名,不需要额外构造。
实现步骤
- 首先正常执行带
:content_file参数的请求 - 请求成功后直接调用
$mech->response->filename即可获取和之前完全一致的原始文件名 - 可以按需将临时文件重命名为原始文件名
示例代码如下:
# 执行流式下载,内容直接写入临时文件 $mech->get( $url, ":content_file" => $tempfile ); # 确认请求成功后操作 if ($mech->success) { # 直接获取原始文件名,返回值和未使用:content_file时完全一致 my $original_filename = $mech->response->filename; # 可选:将临时文件重命名为原始文件名 rename $tempfile, $original_filename or die "文件重命名失败: $!"; }
内容的提问来源于stack exchange,提问作者CJ7
相关产品推荐
相关产品推荐

