fmt.Println(url.QueryEscape("https://www.test.com/test?query=猪"))
fmt.Println(url.PathEscape("https://www.test.com/test?query=猪"))
fmt.Println(url.ParseQuery("a=111&b=222"))
fmt.Println(url.ParseQuery("https://test.com/query?a=111&b=222"))
output:
https%3A%2F%2Fwww.test.com%2Ftest%3Fquery%3D%E7%8C%AA
https:%2F%2Fwww.test.com%2Ftest%3Fquery=%E7%8C%AA
map[a:[111] b:[222]] <nil>
map[https://test.com/query?a:[111] b:[222]] <nil>
所以通过url 拿query 是要分两步的,
func getFileNameFromLocation(location string) (string, error) {
u, err := url.Parse(location)
if err != nil {
return "", apperror.NewInvalidParameterError("location invalid")
}
m, err := url.ParseQuery(u.RawQuery)
if err != nil {
return "", apperror.NewInvalidParameterError("location query invalid")
}
filenames := m["name"]
if filenames == nil || len(filenames) < 1 {
return "", apperror.NewInvalidParameterError("location lack filename")
}
return filenames[0], nil
}