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

例如:

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决定后缀

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

  1. JS下载不带后缀名的文件,下载后自动加了后缀名,如何处理?

    //订单批量导入-模板下载 function templateDownload() {//window.open(resolve("xxx/xxx/xxx/xxxxx.xls#") ...

  2. android studio 图片的命名规则

    只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 小写字母,数字,下划线, 这三个,也就是里面不能有大写字母, .9图片在mipmap中不能识别,在darwable中可以, ...

  3. java获取文件名【不带后缀】

    获取不带后缀名的文件名 public static String getFileNameWithoutSuffix(File file){//忽略判断String fileName = file.ge ...

  4. 间隔定时拍照摄像头FTP上传文件夹图片命名规则

    自定义路径命名: F:\FTP服务器\20211116\images F:\FTP服务器:选择保存的磁盘.文件夹 20211116:自定义创建文件夹的年月日 Images:自定义保存图片的文件夹 FT ...

  5. 图片远程保存,浏览器直接下载

    $url = '远程图片';         $url      = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '',$url] ); // ...

  6. php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解

    一.创建项目 作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php. 二.编写类代码 我们定义一个和文件名相同的类:GrabImage cl ...

  7. php指定浏览器下载多个图片,360浏览器批量下载并保存图片

    360浏览器批量下载并保存图片 360浏览器如何批量下载和保存图片? 360浏览器是中国非常知名的浏览器,有许可供用户使用. 今天php批量下载图片,我谈论的是360浏览器如何批量保存网页图片. 我相 ...

  8. 苹果电脑下载文件自动带后缀问题解决

    #避免苹果电脑下载文件自动带后缀 发现一个有趣的文档,win下载纯文本文件的时候不会带后缀,但是mac下载的就会带后缀,而且要求文件下载时候直接变下载,不能被浏览器打开,如图: 图中发现,在mac下苹 ...

  9. PHP抓取远程图片教程(包含不带后缀图片)

    之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...

最新文章

  1. 破解网页禁止使用“复制”、“粘贴“
  2. 【整合篇】Activiti业务与流程的整合
  3. java sqlhelper_java版sqlhelper(转)
  4. 【人物】乔布斯:A级人才的自尊心不需要你呵护
  5. 什么行业需要java_java开发可以从事什么行业
  6. linux shell trap的使用
  7. CSS3实现光束和波浪
  8. 脉冲神经网络原理及应用pdf_CNN卷积神经网络原理讲解+图片识别应用(附源码)...
  9. 渗透工具-masscan
  10. 迪普科技负载均衡助力金关工程(二期)核心业务交付
  11. 计算机术语仿真,计算机仿真-精.ppt
  12. cydia服务器未响应,完美解决cydia 软件源空白问题
  13. 2018年南京大学计算机专业录取分数线,南京大学2018年录取分数线
  14. 接入小程序客服(java版教程),处理第一次主动推送会话超时问题
  15. MQTT.fx连接阿里云物联网平台
  16. 安全设计:加速传输软件镭速传输安全技术解读
  17. 十三、JavaScript ajax请求
  18. windows下查看硬盘序列号、设备序列号、操作系统版本和安装时间、系统启用时间等命令
  19. 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统
  20. 希腊字母英文简写与常用指代意义

热门文章

  1. 分布式之BASE理论
  2. masonry Unable to simultaneously satisfy constraints. Probably at least one of the c
  3. 解决VS中提示信息没有自动选中首选项的问题
  4. 在梯度下降法中,为什么梯度的负方向是函数下降最快的方向?
  5. Xcode 下载真机包调试
  6. Dracula PRO 零售版
  7. Charles 抓包工具教程(二) Charles 抓包HTTPS请求
  8. sklearn.metrics中的评估方法(MAE\MSE)
  9. 蚂蚁全媒体中心总编刘鑫炜:如何破解碎片化时代的营销困境
  10. 论文排版怎么排?教您3分钟搞定!