package main import ( "crypto/hmac" "crypto/sha1" "encoding/base64" "errors" "fmt" "io/ioutil" "net/http" "os" "time" ) const AccessKeyID = "0000" const AccessKeySecret = "0000" const Bucket = "bbbb" const BucketUrl = "https://bbbb.oss-cn-beijing.aliyuncs.com" var datetime string = time.Now().UTC().Format(http.TimeFormat) func Sign(dest string) string { h := hmac.New(sha1.New, []byte(AccessKeySecret)) h.Write([]byte("PUT\n\napplication/octet-stream\n" + datetime + "\n/" + Bucket + dest)) return "OSS " + AccessKeyID + ":" + base64.StdEncoding.EncodeToString(h.Sum(nil)) } func Upload(file string, dest string) error { f, err := os.Open(file) if err != nil { return err } defer f.Close() request, err := http.NewRequest("PUT", BucketUrl+dest, f) if err != nil { return err } request.Header.Add("Date", datetime) request.Header.Add("Authorization", Sign(dest)) request.Header.Add("Content-Type", "application/octet-stream") client := &http.Client{} response, err := client.Do(request) if err != nil { return err } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return err } if response.StatusCode == 200 { return nil } else { return errors.New(string(body)) } } func main() { up := Upload("02.zip", "/08.zip") fmt.Println(up) }