浏览器保存下载不带后缀的图片文件名命名规则

最近搞爬虫的时候对于下载图片的时候如何命名碰到的问题。对于一般地址规则的图片,

例如:

https://pic2.zhimg.com/80/v2-2e4868da9f91f3320f3fdad248c28ff8_720w.jpg?source=1940ef5c
https://wx3.sinaimg.cn/mw690/005uuxWfly1gn6r1cxl15j30xc0ipjz0.jpg

之前都是这么:

filename = url.split('/')[-1].split('?')[0]

或者这么搞的。

from urllib.parse import urlparse
file_name = os.path.basename(urlparse(url).path)

不过最近碰到好多不地址规则的图片,就处理不了。如下:

https://y3p.org/download/file.php?id=235

https://www.sammyboy.com/attachments/1589520290213-png.78635/

但是浏览器保存的时候名字却正常,因为response headers 里面都带了content-disposition字段,包含了文件名信息

https://y3p.org/download/file.php?id=235 字段

content-disposition:inline; filename*=UTF-8''79C2EAD8-AE48-4E39-A65A-5820697B189A.jpeg

https://www.sammyboy.com/attachments/1589520290213-png.78635/ 字段

content-disposition: inline; filename="1589520290213.png"

所以浏览器保存的时候文件名就是79C2EAD8-AE48-4E39-A65A-5820697B189A.jpeg和1589520290213.png

至于不带content-disposition字段url,例如:https://bkimg.cdn.bcebos.com/pic/0eb30f2442a7d933c8956906b500c61373f08202ab39

浏览器应该根据content-type字段和url路径的最后部分组成名字的。


通过fiddler抓包修改response headers,

https://y3p.org/download/file.php?id=235 去掉content-disposition字段,文件名为:file.jpg

https://www.sammyboy.com/attachments/1589520290213-png.78635/ 去掉content-disposition字段,文件名为:下载.png,看样浏览器蒙了。。。

还有浏览器无法正确保存文件名的例子:

https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2021%2F0130%2F1901f6fcj00qnqthz0008d200dv0066g00g20075.jpg&thumbnail=650x2147483647&quality=80&type=jpg

https://www.91porn.com/captcha.php

至于浏览器到底怎么命名下载文件的,搜了一下也没找到太多有用的资料。

实测来看应该是:

1、看content-disposition字段,ps:content-disposition字段值得格式也不一样,上面我我举的例子就是不同的。

2、没有content-disposition字段的话在根据url和Content-Type拼接文件名,

3、最后实在无法处理的默认文件名为:下载,在由Content-Type决定后缀

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值