golang根据URL获取文件名的示例代码

 更新时间:2024年01月26日 09:34:39   作者:lmy_loveF  
这篇文章主要为大家详细介绍了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=" + fileid
	resp, 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
}
 
 

到此这篇关于golang根据URL获取文件名的示例代码的文章就介绍到这了,更多相关golang URL获取文件名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang并发编程使用Select语句的实现

    golang并发编程使用Select语句的实现

    Go语言中的select语句是并发编程中的重要工具,允许Goroutine等待多个通道操作,它阻塞直至任一case可执行,可用于接收数据、实现超时机制和非阻塞通道操作,感兴趣的可以了解一下
    2024-10-10
  • golang实现对JavaScript代码混淆

    golang实现对JavaScript代码混淆

    在Go语言中,你可以使用一些工具来混淆JavaScript代码,一个常用的工具是Terser,它可以用于压缩和混淆JavaScript代码,你可以通过Go语言的`os/exec`包来调用Terser工具,本文给通过一个简单的示例给大家介绍一下,感兴趣的朋友可以参考下
    2024-01-01
  • 详解Golang中文件系统事件监听

    详解Golang中文件系统事件监听

    文件系统事件是指文件系统相关的各种操作和状态变化,当一个应用层的进程操作文件或目录时,会触发system call,内核的notification子系统可以守在那里,把该进程对文件的操作上报给应用层的监听进程,这篇文章主要介绍了Golang之文件系统事件监听,需要的朋友可以参考下
    2024-01-01
  • golang环形队列实现代码示例

    golang环形队列实现代码示例

    这篇文章主要介绍了golang环形队列实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Go语言中io包核心接口示例详解

    Go语言中io包核心接口示例详解

    Go的io包提供了io.Reader和io.Writer接口,分别用于数据的输入和输出,下面这篇文章主要给大家介绍了关于Go语言中io包核心接口的相关资料,需要的朋友可以参考下
    2021-12-12
  • go build 通过文件名后缀实现不同平台的条件编译操作

    go build 通过文件名后缀实现不同平台的条件编译操作

    这篇文章主要介绍了go build 通过文件名后缀实现不同平台的条件编译操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言操作mysql数据库简单例子

    Go语言操作mysql数据库简单例子

    这篇文章主要介绍了Go语言操作mysql数据库简单例子,本文包含插入数据和查询代码实例,需要的朋友可以参考下
    2014-10-10
  • Go位集合相关操作bitset库安装使用

    Go位集合相关操作bitset库安装使用

    这篇文章主要为大家介绍了Go位集合相关操作bitset库安装使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Go语言扩展原语之Semaphore的用法详解

    Go语言扩展原语之Semaphore的用法详解

    Go语言的扩展包中提供了带权重的信号量 semaphore.Weighted,让我们可以按照不同的权重管理资源的访问,下面小编就来和大家聊聊它们的具体用法吧
    2023-07-07
  • go语言template用法实例

    go语言template用法实例

    这篇文章主要介绍了go语言template用法,实例分析了template的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论