code.gitea.io/gitea@v1.19.3/modules/uri/uri.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package uri 5 6 import ( 7 "fmt" 8 "io" 9 "net/http" 10 "net/url" 11 "os" 12 "strings" 13 ) 14 15 // ErrURISchemeNotSupported represents a scheme error 16 type ErrURISchemeNotSupported struct { 17 Scheme string 18 } 19 20 func (e ErrURISchemeNotSupported) Error() string { 21 return fmt.Sprintf("Unsupported scheme: %v", e.Scheme) 22 } 23 24 // Open open a local file or a remote file 25 func Open(uriStr string) (io.ReadCloser, error) { 26 u, err := url.Parse(uriStr) 27 if err != nil { 28 return nil, err 29 } 30 switch strings.ToLower(u.Scheme) { 31 case "http", "https": 32 f, err := http.Get(uriStr) 33 if err != nil { 34 return nil, err 35 } 36 return f.Body, nil 37 case "file": 38 return os.Open(u.Path) 39 default: 40 return nil, ErrURISchemeNotSupported{Scheme: u.Scheme} 41 } 42 }