golang 根据URL获取文件名

发布于:2024-01-26 ⋅ 阅读:(57) ⋅ 点赞:(0)

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




 


网站公告

今日签到

点亮在社区的每一天
去签到