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)
}