すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Goを使用して、認証ヘッダーに署名を含めてオブジェクトをアップロードする

最終更新日:Dec 22, 2023

このトピックでは、Object Storage Service (OSS) SDK for Goを使用して、Authorizationヘッダーに署名を含めてオブジェクトをアップロードする方法について説明します。

例

次のサンプルコードは、OSS SDK for Go 1.7.6を使用して、Authorizationヘッダーに署名を含めてオブジェクトをアップロードする方法の例を示しています。

パッケージメイン

import (import (import)
  "crypto/hmac"
  "crypto/sha1"
  "encoding/base64"
  "fmt"
  "io/ioutil"
  "net/http"
  "os"
  "strings"
  「時間」
)

func main() {
  // バケットの名前を指定します。 例: examplebucket. 
  bucketname := "examplebucket"
  // バケットのパブリックエンドポイントを指定します。 
  endpoint := "oss-cn-hangzhou.aliyuncs.com"
  // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 
  objectname := "examplefile.txt"
  // 環境変数からアクセス資格情報を取得します。 コードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
  accesskey := os.Getenv("OSS_ACCESS_KEY_ID") 
  accesskeysecret := os.Getenv("OSS_ACCESS_KEY_SECRET") 
  contenttype := "application/json"
  gmtdate := time.Now().UTC().Format(http.TimeFormat)
  stringtosgin := "PUT\n\n" + contenttype + "\n" + gmtdate + "\n" + "/" + bucketname + "/" + objectname
  
  key := [] バイト (accesskeysecret)
  mac := hmac.New(sha1.New, key)
  mac.Write([] バイト (stringtosgin))
  // Base64エンコーディングを実行します。 
  signature := base64.StdEncoding.EncodeToString(mac.Sum(nil))

  url := "http://" + bucketname + "" 。+ endpoint + "/" + objectname

  payload := strings.NewReader("{go:test}")

  req, _ := http.NewRequest("PUT" 、url、payload)

  req.Header.Add("Content-Type", contenttype)
  req.Header.Add("Authorization", "OSS" + accesskey + ":" + signature)
  req.Header.Add("Date", gmtdate)
  res, _ := http.DefaultClient.Do(req)

  defer res.Body.Close()
  body, _ := ioutil.ReadAll(res.Body)

  fmt.Println(res)
  fmt.Println(string(body))
} 

サンプル出力:

&{200 OK 200 HTTP/1.1 1 1マップ [接続: [キープアライブ] コンテンツ長:[0] Content-Md5:[BBFHkvGJ4s7YGacim2mbCg==] 日付: [木曜日、9月2023日09:28:19 GMT] Etag:["04114792F189E2CED819A7229B69 ****"] サーバー:[AliyunOSS] X-Oss-Hash-Crc64ecma:[1342951013225723 ****] X-Oss-Request-Id:[6502D233818A31353126 ****] X-Oss-サーバー-時間:[126]] {} 0 [] false false map[] 0xc000134000 <nil>}

参考資料

承認ヘッダーに署名を含める