golang 根据URL获取文件名

只有一个文件地址,但是没有文件名称,文件地址:http://XXXXXXX/getfile.aspx?fileid=999
但是系统需要把文件名称也写入到数据库
可以根据 resp.Header["Content-Disposition"] 获取文件名

resp.Header["Content-Disposition"]是一个 JSON对象
[{[0]:"attachement;filename=BT-3189%e4%b8%8b%e5%a3%b3(TD).pdf"}]
//复制文件到本地func copyOaFileToPms(fileid) (int, error) {filePath := "http://XXXXXXX/getfile.aspx?fileid=" + fileidresp, err := http.Get(filePath)if err != nil {return 0, err}defer resp.Body.Close()fileName := getFilenameFromContentDisposition(resp.Header["Content-Disposition"])fmt.Println("文件名为:", fileName)fileName, _ = url.QueryUnescape(fileName)fmt.Println("解码后文件名为:", fileName)if len(fileName) == 0 {sbjlog.Debug("copyOaFileToPms 根据文件名获取文件id失败,fileName:%v", fileName)return 0, errors.New("获取文件名称失败")}// 获取文件后缀名fileExt := path.Ext(fileName)// 得到文件名不带后缀onlyFileName := strings.TrimSuffix(fileName, fileExt)onlyFileName = strings.ToUpper(onlyFileName) //文件名转大写fileNameAndExt := onlyFileName + strings.TrimPrefix(fileExt, ".") //文件名+后缀,作为新的文件名
......
}// 从 Content-Disposition 头部信息中提取文件名
func getFilenameFromContentDisposition(contentDispositions []string) string {filename := ""for _, part := range contentDispositions {keyValue := strings.SplitN(part, "=", 2)if len(keyValue) == 2 && strings.Contains(keyValue[0], "filename") {filename = keyValue[1]return filename}}return filename
}



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

继承和原型链

基于原型链的继承示例 // 继承方法 const parent { value: 2, method() { console.log(this); return this.value 1 } } console.log(parent.method());//3 不难理解 const child { __proto__: parent, } console.log(child.method());//3 this 指向child 但是属性中没有v…

亚马逊鲲鹏系统:批量注册买家号的新利器

近年来,随着电商市场的迅速发展,亚马逊作为全球最大的在线零售平台之一,其买家号的需求也日益增长。而亚马逊鲲鹏系统是一个能够批量全自动注册亚马逊买家号的系统。而对于全自动批量注册,账号资料方面,也有一定的要求…

vue3 + antd 封装动态表单组件(二)

传送带: vue3 antd 封装动态表单组件(一) 前置条件: vue版本 v3.3.11 ant-design-vue版本 v4.1.1 vue3 antd 封装动态表单组件(一)是基础版本,但是并不好用, 因为需要配置很多表…

【QT+QGIS跨平台编译】之八:【zstd+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、zstd介绍二、文件下载三、文件分析四、pro文件五、编译实践一、zstd介绍 ZSTD(Zstandard的缩写),是一种快速压缩算法,提供了高压缩比功能。ZSTD还为小数据提供了一种特殊的模式,称为字典压缩。ZSTD库使用BSD许可证作为开放源码软件提供的。它的格式是稳定的,…

【java题解】题目 1779: 你的第一个程序;题目 1779: 你的第一个程序;题目 1173: 计算球体积

目录 题目 1779: 你的第一个程序 题目描述 输入格式 输出格式 样例输入 样例输出 题解 题目 1173: 计算球体积 题目描述 输入格式 输出格式 样例输入 样例输出 题解 题目 1267: AB Problem 题目描述 输入格式 输出格式 样例输入 样例输出 题解 从今天开始…

CANoe的python API,使用python控制CANoe工具

CANoe是一款用于开发、测试和仿真汽车通信系统的工具,它提供了Python API,使得开发者可以使用Python脚本来控制CANoe工具的各项功能。 CANoe的Python API提供了丰富的功能,可以用于配置网络和节点、发送和接收消息、执行测量和仿真等。 注意…

TS学习笔记十:装饰器及三斜线指令

本节介绍TS中的装饰器和三斜线指令, 装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。   三斜线指令是包含单个XML标签的单行注释。 注释的内容会做为编译器指令使用。 讲解视频 20240116-205052装饰器…

基于一款热门大屏可视化设计器使用教程

乐吾乐大屏可视化设计器是一个用于创建和定制大屏幕数据可视化展示的工具,支持零代码实现物联网、工业智能制造等领域的可视化大屏、触摸屏端UI以及工控可视化的解决方案。同时也是一个Web组态工具,支持2D、3D等多种形式,用于构建具有实时数据…

华硕ASUS K43SD笔记本安装win7X64(ventoy为入口以支撑一盘多系统);友善之臂mini2440开发板学习

记录 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 K43SD 安装 win7X64 ) 老爷机 白色 华硕 K43SD 笔记本 安装 win7X64 (常规安装) 设置: 禁用UEFI 启用AHCI ventoy制作MBR(非UEFI)方式的启动U盘 U盘中放cn_windows_7_ultimate_wit…

TCP 三次握手以及滑动窗口

TCP 三次握手 简介: TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的 “ 连接” ,其实是客户端和服务器的内存里保存的一份关于对方的信息,如 IP 地址、端口号等。 TCP 可以…

【机器学习300问】19、深度学习和机器学习什么关系?

之前的文章都聚焦在传统的机器学习上,作为入门,学了许多机器学习的基础。往后的文章我会穿插着机器学习和深度学习的内容进行,所有有必要在这里先说下两者的关系。 一、从范围上讲 深度学习和机器学习都是人工智能的一个子领域,它…

微信会议活动微展示在线活动报名源码系统 带完整的搭建教程

随着微信的普及,微信会议活动已成为企业、团体和个人进行信息交流、业务推广和品牌宣传的重要平台。然而,如何高效地管理、展示和报名参加这些会议活动,一直是许多组织者面临的难题。下面,小编给大家分享一款微信会议活动微展示在…

江科大STM32 中

目录 6、TIM(Timer)定时器基本定时器通用定时器高级定时器示例程序(定时器定时中断&定时器外部时钟)TIM输出比较示例程序(PWM驱动LED呼吸灯&PWM驱动舵机&PWM驱动直流电机)TIM输入捕获示例程序&…

基于EasyExcel的数据导入导出(复制可用)

目录 前言: 新建SpringBoot项目,引入下面的依赖 数据导入导出执行原理和思路: 用户端逻辑: 后台开发逻辑: 代码实现 下拉框策略 批注策略 数据读取监听 Excel工具类 创建导入数据模板类 创建数据导出模板 …

LC每日一题 2024/1/25 2859. 计算 K 置位下标对应元素的和

目录 题干 思路 代码 题干 思路 简单的位运算,就是寻找这个数对应的二进制中的1的个数是否与k相同,如果相同,就把这个数加到结果当中 可能涉及到的方法:Integer.bitCount() -->计算出二进制中包含的1的个数 代码 调用Java…

AI引爆算力需求,思腾推出支持大规模深度学习训练的高性能AI服务器

近日人工智能研究公司OpenAI公布了其大型语言模型的最新版本——GPT-4,可10秒钟做出一个网站,60秒做出一个游戏,参加了多种基准考试测试,它的得分高于88%的应试者;随后百度CEO李彦宏宣布正式推出大语言模型“文心一言”…

使用powerbuilder编写一个全局替换字符的函数

在PowerBuilder中,你可以编写一个全局替换字符的函数。以下是一个简单的例子,该函数名为GlobalReplace,它接受三个字符串参数:原始字符串、要替换的子字符串和替换后的子字符串。该函数返回替换完成后的新字符串。 powerscript /…

C语言中的强制类型转换:改变数据类型的处理方式

概念: 在C语言中,强制类型转换是指将一个数据类型的值转换为另一个数据类型的过程。强制类型转换可以改变数据的处理方式,让程序员可以在某些情况下处理不同数据类型的数据。 示例: 假设我们有两个变量,一个是整型变…

勒索袭击新方式,提防注册机中注入的勒索病毒!

1 事件概述 近期,用户反馈称自己在使用某款“注册机”软件时候,系统中文件被不行加密。通过对受害用户提供的线索和样本进 行综合分析研判,发现了一款借助破解类工具进行传播的新型勒索软件,其会通过向桌面释放勒索信与收款码图片…

STL-实操

3.10.1 案例描述 公司今天招聘了10个员工(ABCDEFGHIJ),10名员工进入公司之后,需要指派员工在那个部门工作 员工信息有: 姓名 工资组成;部门分为:策划、美术、研发 随机给10名员工分配部门和工资 通过multim…