日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame HTTPClient-文件上傳

?GOFrame?支持非常方便的表單文件上傳功能,并且?HTTP?客戶端對上傳功能進行了必要的封裝并極大簡化了上傳功能調用。

成都創(chuàng)新互聯(lián)公司始終堅持【策劃先行,效果至上】的經營理念,通過多達十年累計超上千家客戶的網站建設總結了一套系統(tǒng)有效的全網推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:PVC花箱等企業(yè),備受客戶贊賞。

注意哦:上傳文件大小受到?ghttp.Server?的?ClientMaxBodySize?配置影響:https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#ServerConfig 默認支持的上傳文件大小為?8MB?。

服務端

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

// Upload uploads files to /tmp .
func Upload(r *ghttp.Request) {
	files := r.GetUploadFiles("upload-file")
    names, err := files.Save("/tmp/")
    if err != nil {
		r.Response.WriteExit(err)
	}
	r.Response.WriteExit("upload successfully: ", names)
}

// UploadShow shows uploading simgle file page.
func UploadShow(r *ghttp.Request) {
	r.Response.Write(`
    
    
        GF Upload File Demo
    
        
            
`) } // UploadShowBatch shows uploading multiple files page. func UploadShowBatch(r *ghttp.Request) { r.Response.Write(` GF Upload Files Demo
`) } func main() { s := g.Server() s.Group("/upload", func(group *ghttp.RouterGroup) { group.POST("/", Upload) group.ALL("/show", UploadShow) group.ALL("/batch", UploadShowBatch) }) s.SetPort(8199) s.Run() }

該服務端提供了3個接口:

  • http://127.0.0.1:8199/upload/show 地址用于展示單個文件上傳的H5頁面;
  • http://127.0.0.1:8199/upload/batch 地址用于展示多個文件上傳的H5頁面;
  • http://127.0.0.1:8199/upload 接口用于真實的表單文件上傳,該接口同時支持單個文件或者多個文件上傳;

我們這里訪問 http://127.0.0.1:8199/upload/show 選擇需要上傳的單個文件,提交之后可以看到文件上傳成功到服務器上。

關鍵代碼說明

  • 我們在服務端可以通過?r.GetUploadFiles?方法獲得上傳的所有文件對象,也可以通過?r.GetUploadFile?獲取單個上傳的文件對象。
  • 在?r.GetUploadFiles("upload-file")?中的參數(shù)?"upload-file"?為本示例中客戶端上傳時的表單文件域名稱,開發(fā)者可以根據前后端約定在客戶端中定義,以方便服務端接收表單文件域參數(shù)。
  • 通過?files.Save?可以將上傳的多個文件方便地保存到指定的目錄下,并返回保存成功的文件名。如果是批量保存,只要任意一個文件保存失敗,都將會立即返回錯誤。此外,?Save?方法的第二個參數(shù)支持隨機自動命名上傳文件。
  • 通過?group.POST("/", Upload)?注冊的路由僅支持?POST?方式訪問。

客戶端

單文件上傳

package main

import (
    "fmt"

    "github.com/gogf/gf/v2/net/ghttp"
    "github.com/gogf/gf/v2/os/glog"
)

func main() {
    path := "/home/john/Workspace/Go/github.com/gogf/gf/v2/version.go"
    r, e := ghttp.Post("http://127.0.0.1:8199/upload", "upload-file=@file:"+path)
    if e != nil {
        glog.Error(e)
    } else {
        fmt.Println(string(r.ReadAll()))
        r.Close()
    }
}

注意到了嗎?文件上傳參數(shù)格式使用了 ?參數(shù)名=@file:文件路徑? ,?HTTP?客戶端將會自動解析文件路徑對應的文件內容并讀取提交給服務端。原本復雜的文件上傳操作被gf進行了封裝處理,用戶只需要使用 ?@file:+文件路徑? 來構成參數(shù)值即可。其中,文件路徑請使用本地文件絕對路徑。

首先運行服務端程序之后,我們再運行這個上傳客戶端(注意修改上傳的文件路徑為本地真實文件路徑),執(zhí)行后可以看到文件被成功上傳到服務器的指定路徑下。

多文件上傳

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/net/ghttp"
	"github.com/gogf/gf/v2/os/glog"
)

func main() {
	path1 := "/Users/john/Pictures/logo1.png"
	path2 := "/Users/john/Pictures/logo2.png"
	r, e := ghttp.Post(
		"http://127.0.0.1:8199/upload",
		fmt.Sprintf(`upload-file=@file:%s&upload-file=@file:%s`, path1, path2),
	)
	if e != nil {
		glog.Error(e)
	} else {
		fmt.Println(string(r.ReadAll()))
		r.Close()
	}
}

可以看到,多個文件上傳提交參數(shù)格式為?參數(shù)名=@file:xxx&參數(shù)名=@file:xxx...?,也可以使用?參數(shù)名[]=@file:xxx&參數(shù)名[]=@file:xxx...?的形式。

首先運行服務端程序之后,我們再運行這個上傳客戶端(注意修改上傳的文件路徑為本地真實文件路徑),執(zhí)行后可以看到文件被成功上傳到服務器的指定路徑下。

自定義文件名稱

很簡單,修改?FileName?屬性即可。

s := g.Server()
s.BindHandler("/upload", func(r *ghttp.Request) {
    file := r.GetUploadFile("TestFile")
    if file == nil {
        r.Response.Write("empty file")
        return
    }
    file.Filename = "MyCustomFileName.txt"
    fileName, err := file.Save(gfile.TempDir())
    if err != nil {
        r.Response.Write(err)
        return
    }
    r.Response.Write(fileName)
})
s.SetPort(8999)
s.Run()

分享名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame HTTPClient-文件上傳
當前URL:http://www.5511xx.com/article/cdeijpj.html