admin管理员组文章数量:1535097
最近搞爬虫的时候对于下载图片的时候如何命名碰到的问题。对于一般地址规则的图片,
例如:
https://pic2.zhimg/80/v2-2e4868da9f91f3320f3fdad248c28ff8_720w.jpg?source=1940ef5c,
https://wx3.sinaimg/mw690/005uuxWfly1gn6r1cxl15j30xc0ipjz0.jpg
之前都是这么:
filename = url.split('/')[-1].split('?')[0]
或者这么搞的。
from urllib.parse import urlparse
file_name = os.path.basename(urlparse(url).path)
不过最近碰到好多不地址规则的图片,就处理不了。如下:
https://y3p/download/file.php?id=235
https://www.sammyboy/attachments/1589520290213-png.78635/
但是浏览器保存的时候名字却正常,因为response headers 里面都带了content-disposition字段,包含了文件名信息
https://y3p/download/file.php?id=235 字段
content-disposition:inline; filename*=UTF-8''79C2EAD8-AE48-4E39-A65A-5820697B189A.jpeg
https://www.sammyboy/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/pic/0eb30f2442a7d933c8956906b500c61373f08202ab39
浏览器应该根据content-type字段和url路径的最后部分组成名字的。
通过fiddler抓包修改response headers,
https://y3p/download/file.php?id=235 去掉content-disposition字段,文件名为:file.jpg
https://www.sammyboy/attachments/1589520290213-png.78635/ 去掉content-disposition字段,文件名为:下载.png,看样浏览器蒙了。。。
还有浏览器无法正确保存文件名的例子:
https://nimg.ws.126/?url=http%3A%2F%2Fdingyue.ws.126%2F2021%2F0130%2F1901f6fcj00qnqthz0008d200dv0066g00g20075.jpg&thumbnail=650x2147483647&quality=80&type=jpg
https://www.91porn/captcha.php
至于浏览器到底怎么命名下载文件的,搜了一下也没找到太多有用的资料。
实测来看应该是:
1、看content-disposition字段,ps:content-disposition字段值得格式也不一样,上面我我举的例子就是不同的。
2、没有content-disposition字段的话在根据url和Content-Type拼接文件名,
3、最后实在无法处理的默认文件名为:下载,在由Content-Type决定后缀
版权声明:本文标题:浏览器保存下载不带后缀的图片文件名命名规则 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1726896358a1089137.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论