golang 根据URL获取文件名

文章介绍了如何从HTTP响应头的Content-Disposition字段获取文件名,以及使用Go语言实现的功能如copyOaFileToPms,它用于下载文件并处理文件名,包括解码和转换文件名格式。
摘要由CSDN通过智能技术生成

只有一个文件地址,但是没有文件名称,文件地址: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
}




 

files := "E:\\data\\test.txt"
    paths, fileName := filepath.Split(files)
    fmt.Println(paths, fileName)      //获取路径中的目录及文件名 E:\data\  test.txt
    fmt.Println(filepath.Base(files)) //获取路径中的文件名test.txt
    fmt.Println(path.Ext(files))      //获取路径中的文件的后缀 .txt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值