主頁(yè) > 知識(shí)庫(kù) > Golang實(shí)現(xiàn)http文件上傳小功能的案例

Golang實(shí)現(xiàn)http文件上傳小功能的案例

熱門(mén)標(biāo)簽:外呼系統(tǒng)用什么卡 評(píng)價(jià)高的400電話(huà)辦理 阿克蘇地圖標(biāo)注 外呼系統(tǒng)顯本地手機(jī)號(hào) 百度地圖標(biāo)注后傳給手機(jī) 電話(huà)機(jī)器人軟件免費(fèi) 壽光微信地圖標(biāo)注 涿州代理外呼系統(tǒng) excel地圖標(biāo)注分布數(shù)據(jù)

看代碼吧~

package main
import (
	"fmt"
	"io"
	"net/http"
	"os"
)
func main() {
	http.HandleFunc("/", index)
	http.HandleFunc("/upload", upload)
	http.ListenAndServe(":1789", nil)
}
func upload(w http.ResponseWriter, r *http.Request) {
	r.ParseMultipartForm(32  20)
	file, handler, err := r.FormFile("uploadfile")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer f.Close()
	io.Copy(f, file)
	fmt.Fprintln(w, "upload ok!")
}
func index(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte(tpl))
}
const tpl = `html>
head>
title>上傳文件/title>
/head>
body>
form enctype="multipart/form-data" action="/upload" method="post">
 input type="file" name="uploadfile" />
 input type="hidden" name="token" value="{...{.}...}"/>
 input type="submit" value="upload" />
/form>
/body>
/html>`

補(bǔ)充:Golang 調(diào)用http 文件上傳接口 進(jìn)行上傳文件

遠(yuǎn)程服務(wù)器有一個(gè)文件上傳接口,文件用于保存到服務(wù)器本地,用go如何調(diào)用此接口將文件上傳至服務(wù)器?

首先,文件上傳請(qǐng)求方 與 接收方 要協(xié)調(diào)工作(解析等工作)

接收方:

func UploadFileToLocal(c echo.Context) error {
 r := c.Request()  //無(wú)論用的什么路由,原理是要從request獲取數(shù)據(jù)
 t := echotools.NewEchoTools(c)
 reader, err := r.MultipartReader() //request 獲得文件 reader
 if err != nil {
  return t.BadRequest(err.Error())
 }
 if reader == nil {
  return t.BadRequest(`未接受到文件`)
 }
    //遍歷操作 獲得的
 for {
  part, err := reader.NextPart()
  if err == io.EOF {
   break
  }
  fmt.Printf("FileName=[%s],FormName[%s]\n",part.FileName(),part.FormName())
  if part.FileName() == "" {
   data, _ := ioutil.ReadAll(part)
   fmt.Printf("FormData=[%s]\n", string(data))
            continue
  } else {
            //創(chuàng)建一個(gè)空文件
   dst, er:= os.Create("static/uploadfiles/" + part.FileName())
   if er != nil {
    return t.BadRequest(err.Error())
   }
   defer dst.Close()
            //將獲取到的文件復(fù)制 給 創(chuàng)建的文件
   _,err := io.Copy(dst, part)
   if err != nil {
    return t.BadRequest(err.Error())
   }
  }
 }
  return t.OK(`OK`)
}

請(qǐng)求方:

func SendFile(c echo.Context) error{
 t := echotools.NewEchoTools(c)
 r := c.Request()
 file, header, err := r.FormFile("file") // 獲得客戶(hù)端傳來(lái)的 文件 file
 if err != nil {
  return t.BadRequest("上傳錯(cuò)誤:" + err.Error())
 }
 
 bodyBuffer := bytes.Buffer{}
 bodyWriter := multipart.NewWriter(bodyBuffer)
 fileWriter, _ := bodyWriter.CreateFormFile("files", header.Filename)
 io.Copy(fileWriter, file) //將 客戶(hù)端文件 復(fù)制給 用于傳輸?shù)?fileWriter
 contentType := bodyWriter.FormDataContentType() //contentType
 bodyWriter.Close()
 ip := config.Opts.UploadServerAddr //配置
 resp, _ := http.Post("http://"+ip+"/uploadToLocal/"+header.Filename, contentType, bodyBuffer)
 defer resp.Body.Close()
 resp_body, _ := ioutil.ReadAll(resp.Body)
 
 if resp.Status == `200 OK` {
  return t.OK(string(resp_body))
 }else {
  return t.BadRequest(string(resp_body))
 }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 基于golang uint8、int8與byte的區(qū)別說(shuō)明
  • golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解
  • golang 實(shí)現(xiàn)時(shí)間戳和時(shí)間的轉(zhuǎn)化
  • Golang Gob編碼(gob包的使用詳解)
  • golang如何獲得一個(gè)變量的類(lèi)型
  • golang 如何獲取文件夾下面的文件列表
  • golang 如何實(shí)現(xiàn)HTTP代理和反向代理
  • golang值類(lèi)型轉(zhuǎn)換成[]uint8類(lèi)型的操作

標(biāo)簽:汕頭 雞西 欽州 銅川 梅河口 蘭州 吐魯番 重慶

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang實(shí)現(xiàn)http文件上傳小功能的案例》,本文關(guān)鍵詞  Golang,實(shí)現(xiàn),http,文件,上傳,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang實(shí)現(xiàn)http文件上傳小功能的案例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Golang實(shí)現(xiàn)http文件上傳小功能的案例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章