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

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

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

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

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

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

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

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

HTML模版內容如下(在項目/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>

服務端可以使用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?? ??? ??? ??? ??? ?//文件內容,類型[]byte
?? ?tmpfile string?? ??? ??? ??? ??? ?//臨時文件
}

服務器端編寫代碼如下

  • 獲取客戶端傳遞后的文件流,把文件保存到服務器即可
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ù)據
? ?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()
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

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

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

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

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

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

    匿名函數(shù)是不具名的函數(shù),可以在不定義函數(shù)名的情況下直接使用,通常用于函數(shù)內部的局部作用域中,這篇文章主要介紹了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ā)人員經常遇到的問題,本文主要介紹了Go?跨域中間件解決CORS問題,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 詳解Golang互斥鎖內部實現(xiàn)

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

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

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

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

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

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

最新評論

屏南县| 灵宝市| 临西县| 县级市| 六安市| 巴楚县| 长沙市| 德安县| 合阳县| 丽江市| 繁昌县| 乌兰察布市| 荥经县| 丰县| 彰化县| 东源县| 卓资县| 固始县| 贺兰县| 永丰县| 天祝| 如东县| 漳平市| 黔江区| 富宁县| 桐城市| 抚松县| 塔河县| 涿州市| 神农架林区| 阿勒泰市| 北辰区| 渭南市| 鹤峰县| 库伦旗| 堆龙德庆县| 浦江县| 武平县| 罗平县| 万荣县| 阳新县|