最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言實現(xiàn)文件上傳

 更新時間:2022年07月26日 09:03:01   作者:書香水墨  
這篇文章主要為大家詳細(xì)介紹了Go語言實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Go實現(xiàn)文件上傳的具體代碼,供大家參考,具體內(nèi)容如下

文件上傳:客戶端把上傳文件轉(zhuǎn)換為二進制流后發(fā)送給服務(wù)器,服務(wù)器對二進制流進行解析

HTML表單(form)enctype(Encode Type)屬性控制表單在提交數(shù)據(jù)到服務(wù)器時數(shù)據(jù)的編碼類型.

enctype=”application/x-www-form-urlencoded” 默認(rèn)值,表單數(shù)據(jù)會被編碼為名稱/值形式

  • enctype=”multipart/form-data” 編碼成消息,每個控件對應(yīng)消息的一部分.請求方式必須是post
  • enctype=”text/plain” 純文本形式進行編碼的

HTML模版內(nèi)容如下(在項目/view/index.html)

<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <title>文件上傳</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post">
? ? 用戶名:<input type="text" name="username"/><br/>
? ? 密碼:<input type="file" name="photo"/><br/>
? ? <input type="submit" value="注冊"/>
</form>
</body>
</html>

服務(wù)端可以使用FormFIle(“name”)獲取上傳到的文件,官方定義如下

// FormFile returns the first file for the provided form key.
// FormFile calls ParseMultipartForm and ParseForm if necessary.
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) {
?? ?if r.MultipartForm == multipartByReader {
?? ??? ?return nil, nil, errors.New("http: multipart handled by MultipartReader")
?? ?}
?? ?if r.MultipartForm == nil {
?? ??? ?err := r.ParseMultipartForm(defaultMaxMemory)
?? ??? ?if err != nil {
?? ??? ??? ?return nil, nil, err
?? ??? ?}
?? ?}
?? ?if r.MultipartForm != nil && r.MultipartForm.File != nil {
?? ??? ?if fhs := r.MultipartForm.File[key]; len(fhs) > 0 {
?? ??? ??? ?f, err := fhs[0].Open()
?? ??? ??? ?return f, fhs[0], err
?? ??? ?}
?? ?}
?? ?return nil, nil, ErrMissingFile
}

multipart.File是文件對象

// File is an interface to access the file part of a multipart message.
// Its contents may be either stored in memory or on disk.
// If stored on disk, the File's underlying concrete type will be an *os.File.
type File interface {
?? ?io.Reader
?? ?io.ReaderAt
?? ?io.Seeker
?? ?io.Closer
}

封裝了文件的基本信息

// A FileHeader describes a file part of a multipart request.
type FileHeader struct {
?? ?Filename string?? ??? ??? ??? ??? ?//文件名
?? ?Header ? textproto.MIMEHeader?? ?//MIME信息
?? ?Size ? ? int64?? ??? ??? ??? ??? ?//文件大小,單位bit

?? ?content []byte?? ??? ??? ??? ??? ?//文件內(nèi)容,類型[]byte
?? ?tmpfile string?? ??? ??? ??? ??? ?//臨時文件
}

服務(wù)器端編寫代碼如下

  • 獲取客戶端傳遞后的文件流,把文件保存到服務(wù)器即可
package main

import (
? ?"net/http"
? ?"fmt"
? ?"html/template"
? ?"io/ioutil"
)

/*
顯示歡迎頁upload.html
?*/
func welcome(rw http.ResponseWriter, r *http.Request) {
? ?t, _ := template.ParseFiles("template/html/upload.html")
? ?t.Execute(rw, nil)
}

/*
文件上傳
?*/
func upload(rw http.ResponseWriter, r *http.Request) {
? ?//獲取普通表單數(shù)據(jù)
? ?username := r.FormValue("username")
? ?fmt.Println(username)
? ?//獲取文件流,第三個返回值是錯誤對象
? ?file, header, _ := r.FormFile("photo")
? ?//讀取文件流為[]byte
? ?b, _ := ioutil.ReadAll(file)
? ?//把文件保存到指定位置
? ?ioutil.WriteFile("D:/new.png", b, 0777)
? ?//輸出上傳時文件名
? ?fmt.Println("上傳文件名:", header.Filename)
}

func main() {
? ?server := http.Server{Addr: "localhost:8899"}

? ?http.HandleFunc("/", welcome)
? ?http.HandleFunc("/upload", upload)

? ?server.ListenAndServe()
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go中Gzip與json搭配實現(xiàn)數(shù)據(jù)壓縮demo

    Go中Gzip與json搭配實現(xiàn)數(shù)據(jù)壓縮demo

    這篇文章主要為大家介紹了Go中Gzip與json搭配使用壓縮數(shù)據(jù)的實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • golang中連接mysql數(shù)據(jù)庫

    golang中連接mysql數(shù)據(jù)庫

    這篇文章主要介紹了golang中連接mysql數(shù)據(jù)庫的步驟,幫助大家更好的理解和學(xué)習(xí)go語言,感興趣的朋友可以了解下
    2020-12-12
  • Go語言讀取,設(shè)置Cookie及設(shè)置cookie過期方法詳解

    Go語言讀取,設(shè)置Cookie及設(shè)置cookie過期方法詳解

    這篇文章主要介紹了Go語言讀取,設(shè)置Cookie及設(shè)置cookie過期方法詳解,需要的朋友可以參考下
    2022-04-04
  • golang的匿名函數(shù)和普通函數(shù)的區(qū)別解析

    golang的匿名函數(shù)和普通函數(shù)的區(qū)別解析

    匿名函數(shù)是不具名的函數(shù),可以在不定義函數(shù)名的情況下直接使用,通常用于函數(shù)內(nèi)部的局部作用域中,這篇文章主要介紹了golang的匿名函數(shù)和普通函數(shù)的區(qū)別,需要的朋友可以參考下
    2023-03-03
  • 使用golang引入外部包的三種方式:go get, go module, vendor目錄

    使用golang引入外部包的三種方式:go get, go module, ve

    這篇文章主要介紹了使用golang引入外部包的三種方式:go get, go module, vendor目錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • go語言中if語句用法實例

    go語言中if語句用法實例

    這篇文章主要介紹了go語言中if語句用法,以實例形式分析了if語句的定義及使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • Go?跨域中間件解決CORS問題

    Go?跨域中間件解決CORS問題

    跨域問題CORS是前端開發(fā)人員經(jīng)常遇到的問題,本文主要介紹了Go?跨域中間件解決CORS問題,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 詳解Golang互斥鎖內(nèi)部實現(xiàn)

    詳解Golang互斥鎖內(nèi)部實現(xiàn)

    本篇文章主要介紹了詳解Golang互斥鎖內(nèi)部實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Golang實現(xiàn)Json分級解析及數(shù)字解析實踐詳解

    Golang實現(xiàn)Json分級解析及數(shù)字解析實踐詳解

    你是否遇到過在無法準(zhǔn)確確定json層級關(guān)系的情況下對json進行解析的需求呢?本文就來和大家介紹一次解析不確定的json對象的經(jīng)歷,以及遇到的問題和解決方法
    2023-02-02
  • Golang map實踐及實現(xiàn)原理解析

    Golang map實踐及實現(xiàn)原理解析

    這篇文章主要介紹了Golang map實踐以及實現(xiàn)原理,Go 語言中,通過哈希查找表實現(xiàn) map,用鏈表法解決哈希沖突,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-06-06

最新評論

永修县| 新密市| 滦南县| 沅陵县| 丰台区| 安国市| 宁海县| 延寿县| 望奎县| 浦东新区| 永宁县| 正定县| 久治县| 隆林| 高邑县| 仙桃市| 邹城市| 徐闻县| 五莲县| 西城区| 陕西省| 萨迦县| 郓城县| 射阳县| 枞阳县| 永修县| 偏关县| 鹰潭市| 晴隆县| 三都| 家居| 东源县| 大方县| 永德县| 扶风县| 阜南县| 渝中区| 宁德市| 宁远县| 常宁市| 胶南市|