Golang上傳檔案到七牛雲
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。### 擷取首先要擷取的是七牛雲官方的SDK```go get -u github.com/qiniu/api.v7```### 七牛雲- [七牛雲](https://www.qiniu.com/)沒有帳號的去註冊一個帳號。- [個人中心](https://portal.qiniu.com/user/key)有帳號的直接進個人中心,去查看秘鑰AccessKey/SecretKey### 代碼一些常變數```const (//本地儲存的檔案夾名稱upload_path string = "/files/")var (//BUCKET是你在儲存空間的名稱ACCESS_KEY = "******EA09VCy5EfN_*******************"SECRET_KEY = "******-yvwcYwImN6F*******************"BUCKET = "bucket")```##### `WEB`端代碼**擷取上傳的檔案**```func uploadHandle(w http.ResponseWriter, r *http.Request) {//從請求當中判斷方法if r.Method == "GET" {tmp, err := template.ParseFiles("templates/upload.html")if err != nil {fmt.Println("模版渲染失敗")}tmp.Execute(w, nil)} else {//擷取檔案內容 要這樣擷取file, head, err := r.FormFile("file")if err != nil {fmt.Println(err)return}defer file.Close()//建立檔案夾pwd, _ := os.Getwd()//檔案夾存在的話會返回一個錯誤,可以用`_`拋出去err = os.Mkdir(pwd+upload_path, os.ModePerm)if err != nil {fmt.Println("dir is create Error")}fW, err := os.Create(pwd + upload_path + head.Filename)if err != nil {fmt.Println("檔案建立失敗")return}fmt.Println(*fW)defer fW.Close()//複製檔案,儲存到本地_, err = io.Copy(fW, file)if err != nil {fmt.Println("檔案儲存失敗")return}//調用七牛上傳函數upload_qiniu(pwd + upload_path + head.Filename)http.Redirect(w, r, "/", http.StatusFound)}}```**七牛雲上傳函數**```func upload_qiniu(filePath string) {key := "github-x.png"//上傳憑證,關於憑證這塊大家可以去看看官方文檔putPolicy := storage.PutPolicy{Scope: BUCKET,}mac := qbox.NewMac(ACCESS_KEY, SECRET_KEY)upToken := putPolicy.UploadToken(mac)cfg := storage.Config{}//空間對應機房//其中關於Zone對象和機房的關係如下://機房Zone對象//華東storage.ZoneHuadong//華北storage.ZoneHuabei//華南storage.ZoneHuanan//北美storage.ZoneBeimei//七牛雲端儲存空間設定首頁有儲存地區cfg.Zone = &storage.ZoneHuanan//不啟用HTTPS網域名稱cfg.UseHTTPS = false//不使用CND加速cfg.UseCdnDomains = false//構建上傳表單對象formUploader := storage.NewFormUploader(&cfg)ret := storage.PutRet{}// 可選putExtra := storage.PutExtra{Params: map[string]string{"x:name": "github logo",},}err := formUploader.PutFile(context.Background(), &ret, upToken, key, filePath, &putExtra)if err != nil {fmt.Println(err)return}fmt.Println(ret.Key, ret.Hash)}```+ **整個代碼實現主要的是儲存在本地的路徑,然後在上傳函數裡面讀取路徑上傳檔案**+ **可能還會有其他的方便,快捷的方法,我也還在摸索中,這個算是這幾天學習的一個總結,後續還會修改代碼,做一些擴充**+ [完整代碼地址](https://github.com/ma1ive/Go/blob/master/qiniu/main.go)213 次點擊 ∙ 1 贊