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

GO語言原生實現(xiàn)文件上傳功能

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

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

寫在前面

最近在學(xué)習(xí)go,發(fā)現(xiàn)實踐才是檢驗真理的唯一標(biāo)準(zhǔn)。在不引入任何框架的基礎(chǔ)上,利用go語言實現(xiàn)一個web小應(yīng)用也是比較方便的,但是坑還是不少,這里直接放上來,以防以后自己用得到,也希望可以幫到你。

首先寫處理文件上傳的handler

package handler

/**
實現(xiàn)文件的上傳和下載
*/
import (
?? ?"fmt"
?? ?"io"
?? ?"io/ioutil"
?? ?"net/http"
?? ?"os"
)

//文件上傳(這里一定要注意,方法名首字母大寫,否則無法在別的包中被引用發(fā)現(xiàn))
func UploadHandler(w http.ResponseWriter, r *http.Request) {
?? ?//這里的輸出數(shù)字是為了等下等直觀的感受程序運(yùn)行的過程,后面輸出的數(shù)字功能類似
?? ?fmt.Printf("4")
?? ?//首次訪問指定url默認(rèn)采用GET方法提交,所以需要調(diào)出提交文件表單頁面
?? ?if r.Method == "GET" {
?? ??? ?fmt.Printf("5")
?? ??? ?//通過讀取html文件再交由http.ResponseWriter輸出的方式實現(xiàn)文件提交頁面的喚出
?? ??? ?data, err := ioutil.ReadFile("static/view/index.html")
?? ??? ?if err != nil {
?? ??? ??? ?_, _ = io.WriteString(w, "something wrong!")
?? ??? ??? ?return
?? ??? ?}
?? ??? ?_, _ = io.WriteString(w, string(data))
?? ?} else if r.Method == "POST" {
?? ??? ?fmt.Printf("6")
?? ??? ?//將文件存儲至本地
?? ??? ?file, head, err := r.FormFile("file")

?? ??? ?if err != nil {
?? ??? ??? ?fmt.Printf("Failed to get file data %s\n", err.Error())
?? ??? ??? ?return
?? ??? ?}
?? ??? ?defer file.Close()
?? ??? ?//在本地創(chuàng)建一個新的文件去承載上傳的文件
?? ??? ?newFile, err := os.Create("/tmp/" + head.Filename)
?? ??? ?if err != nil {
?? ??? ??? ?fmt.Printf("Failed to create newFile data %s\n", err.Error())
?? ??? ??? ?return
?? ??? ?}

?? ??? ?defer newFile.Close()
?? ??? ?_, err = io.Copy(newFile, file)
?? ??? ?if err != nil {
?? ??? ??? ?fmt.Printf("Failed to save into newFile %s\n", err.Error())
?? ??? ??? ?return
?? ??? ?}
?? ??? ?// 重定向到成功的頁面邏輯
?? ??? ?http.Redirect(w, r, "/file/upload/suc", http.StatusFound)
?? ?}
}

// 文件上傳成功處理邏輯
func UploadSucHandler(w http.ResponseWriter, r *http.Request) {
?? ?_, _ = io.WriteString(w, "Upload Succeed!")
}

其次完成main方法,注冊路由信息

所謂的注冊路由信息,其實就是類似于java框架中配置url攔截規(guī)則,具體見下:

package main

import (
?? ?"log"
?? ?"net/http"
?? ?"zone/src/handler"
)

func main() {
?? ?//設(shè)置http的路由規(guī)則,類似于Java框架中設(shè)置請求攔截規(guī)則
?? ?http.HandleFunc("/file/upload", handler.UploadHandler)
?? ?http.HandleFunc("/file/upload/suc", handler.UploadSucHandler)
?? ?//開啟http監(jiān)聽
?? ?//err := http.ListenAndServe(":8080", nil)
?? ?//if err != nil {
?? ?//?? ?fmt.Printf("There is an err %s", err.Error())
?? ?//}
?? ?//上面方法不太優(yōu)雅,現(xiàn)在用log直接包裹監(jiān)聽
?? ?log.Fatal(http.ListenAndServe(":8081", nil))
}

最后完成前端文件提交頁面

<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <title>上傳文件</title>
</head>
<body>
<form action="/file/upload" method="post" enctype="multipart/form-data">
? ? <p><input type="file" name="file" value=""></p>
? ? <p><input type="submit" value="submit"></p>
</form>
</body>
</html>

測試一下

程序后臺執(zhí)行情況:

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

相關(guān)文章

  • Hugo 游樂場內(nèi)容初始化示例詳解

    Hugo 游樂場內(nèi)容初始化示例詳解

    這篇文章主要為大家介紹了Hugo 游樂場內(nèi)容初始化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Go語言Gin框架獲取請求參數(shù)的兩種方式

    Go語言Gin框架獲取請求參數(shù)的兩種方式

    在添加路由處理函數(shù)之后,就可以在路由處理函數(shù)中編寫業(yè)務(wù)處理代碼了,而編寫業(yè)務(wù)代碼第一件事一般就是獲取HTTP請求的參數(shù)吧,Gin框架在net/http包的基礎(chǔ)上封裝了獲取參數(shù)的方式,本文小編給大家介紹了獲取參數(shù)的兩種方式,需要的朋友可以參考下
    2024-01-01
  • Golang 語言高效使用字符串的方法

    Golang 語言高效使用字符串的方法

    這篇文章主要介紹了Golang 語言高效使用字符串的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解Go語言如何檢查系統(tǒng)命令是否可用

    詳解Go語言如何檢查系統(tǒng)命令是否可用

    這篇文章主要為大家詳細(xì)介紹了Go語言通過編寫一個函數(shù),利用Go語言標(biāo)準(zhǔn)庫中的功能來檢查系統(tǒng)命令是否可用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • 簡單聊聊為什么說Go語言字符串是不可變的

    簡單聊聊為什么說Go語言字符串是不可變的

    最近有讀者留言說,平時在寫代碼的過程中,是會對字符串進(jìn)行修改的,但網(wǎng)上都說 Go 語言字符串是不可變的,這是為什么呢,本文就來和大家簡單講講
    2023-05-05
  • Golang的func參數(shù)及返回值操作

    Golang的func參數(shù)及返回值操作

    這篇文章主要介紹了Golang的func參數(shù)及返回值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go?chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)

    Go?chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)

    這篇文章主要為大家介紹了Go?chassis云原生微服務(wù)開發(fā)框架應(yīng)用編程實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語言流程控制之goto語句與無限循環(huán)

    Go語言流程控制之goto語句與無限循環(huán)

    這篇文章主要介紹了Go語言流程控制之goto語句與無限循環(huán),是golang入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • golang高并發(fā)的深入理解

    golang高并發(fā)的深入理解

    golang從語言級別上對并發(fā)提供了支持,而且在啟動并發(fā)的方式上直接添加了語言級的關(guān)鍵字。下面這篇文章主要給大家介紹了關(guān)于golang高并發(fā)的相關(guān)資料,需要的朋友可以參考下
    2019-03-03
  • Golang?websocket協(xié)議使用淺析

    Golang?websocket協(xié)議使用淺析

    這篇文章主要介紹了Golang?websocket協(xié)議的使用,WebSocket是一種新型的網(wǎng)絡(luò)通信協(xié)議,可以在Web應(yīng)用程序中實現(xiàn)雙向通信,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05

最新評論

邵阳县| 米林县| 饶河县| 鹤山市| 天等县| 浦城县| 连城县| 临洮县| 邓州市| 南昌市| 枞阳县| 洞口县| 门头沟区| 友谊县| 绥化市| 石屏县| 光泽县| 宁陕县| 梅河口市| 榆林市| 台安县| 五河县| 稷山县| 丹巴县| 吉林市| 秦皇岛市| 上高县| 探索| 泗水县| 德阳市| 永吉县| 宽甸| 阿城市| 上高县| 安康市| 五常市| 怀宁县| 繁峙县| 稻城县| 融水| 健康|