示例代码:
package main import ( "fmt" "path" ) func main() { filename := "device/sdk/CMakeLists.txt" filenameall := path.Base(filename) filesuffix := path.Ext(filename) fileprefix := filenameall[0:len(filenameall) - len(filesuffix)] //fileprefix, err := strings.TrimSuffix(filenameall, filesuffix) fmt.Println("file name:", filenameall) fmt.Println("file prefix:", fileprefix) fmt.Println("file suffix:", filesuffix) }
执行结果:
file name: CMakeLists.txt file prefix: CMakeLists file suffix: .txt
path.Base(filename)
:获取不包含目录的文件名
path.Ext(filename)
:获取文件后缀
文件前缀 可以使用切片的方式获取:
fileprefix := filenameall[0:len(filenameall) - len(filesuffix)]
也可以使用 strings.TrimSuffix()
进行获取:
import "strings" fileprefix, err := strings.TrimSuffix(filenameall, filesuffix)
Go文件上传
package main import ( "bytes" "fmt" "io" "io/ioutil" "mime/multipart" "net/http" "os" "path" ) func postFile(filename string, targetUrl string) error { bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf) // 关键的一步操作 fileWriter, err := bodyWriter.CreateFormFile("file", path.Base(filename)) if err != nil { fmt.Println("error writing to buffer") return err } // 打开文件句柄操作 fh, err := os.Open(filename) if err != nil { fmt.Println("error opening file") return err } defer fh.Close() // iocopy _, err = io.Copy(fileWriter, fh) if err != nil { return err } contentType := bodyWriter.FormDataContentType() bodyWriter.Close() resp, err := http.Post(targetUrl, contentType, bodyBuf) if err != nil { return err } defer resp.Body.Close() resp_body, err := ioutil.ReadAll(resp.Body) if err != nil { return err } fmt.Println(resp.Status) fmt.Println(string(resp_body)) return nil } // sample usage func main() { targetUrl := "http://local:8880/upload" if len(os.Args) > 1 { filename := os.Args[2] postFile(filename, targetUrl) // do something with command } else { // No arguments were specified! fmt.Println("没有传入图片地址") } }