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

Go實現(xiàn)文件上傳和下載

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

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

一.文件上傳

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

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

  • enctype=”application/x-www-form-urlencoded” 默認值,表單數(shù)據(jù)會被編碼為名稱/值形式
  • enctype=”multipart/form-data” 編碼成消息,每個控件對應消息的一部分.請求方式必須是post
  • enctype=”text/plain” 純文本形式進行編碼的

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
? ? ? ? "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
? ? <title>文件上傳</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
文件名:<input type="text" name="name"/><br/>
? 文件:<input type="file" name="file"/><br/>
? <input type="submit" value="提交"/>
</form>

</body>
</html>

服務端go語言代碼如下:

package main

import (
?? ?"html/template"
?? ?"net/http"
)

func test2(w http.ResponseWriter, r *http.Request) ?{
?? ?t,_:=template.ParseFiles("view/index5.html")
?? ?t.Execute(w,nil)

}
func main() {
server:=http.Server{Addr: ":8090"}
http.HandleFunc("/",test2)
server.ListenAndServe()
}

效果截圖:

在這里插入圖片描述

這比我之前學的Java Swing簡便多了!
獲取客戶端傳遞后的文件流,把文件保存到服務器即可,我們以上傳一張照片為例。
我們新增一個頁面:文件上傳成功,當我們上傳成功時顯示上傳成功。

html代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
? ? ? ? "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
? ? <title>Title</title>
</head>
<body>
文件上傳成功
</body>
</html>

此時,服務器端代碼要保存接受的圖片。
服務器端代碼如下:

package main

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

func test2(w http.ResponseWriter, r *http.Request) ?{
?? ?t,_:=template.ParseFiles("view/index5.html")
?? ?t.Execute(w,nil)

}
func upload(w http.ResponseWriter, r *http.Request) ?{
?? ?fileName:=r.FormValue("name")
?? ?file,fileHeader,_:=r.FormFile("file")
?? ?b,_:=ioutil.ReadAll(file)
?? ?ioutil.WriteFile("D:/"+fileName+fileHeader.Filename[strings.LastIndex(fileHeader.Filename,"."):],b,0777)
?? ?t,_:=template.ParseFiles("view/sucess.html")
?? ?t.Execute(w,nil)
}
func main() {
server:=http.Server{Addr: ":8090"}
http.HandleFunc("/",test2)
http.HandleFunc("/upload",upload)
server.ListenAndServe()
}

操作如下圖:

第一步:輸入文件名

在這里插入圖片描述

第二步,選擇文件:

在這里插入圖片描述

第四步:按提交按鈕:

在這里插入圖片描述

最后,上傳成功:

在這里插入圖片描述

我們再來檢查一下D盤:

在這里插入圖片描述

上傳成功!

二.文件下載簡介

文件下載總體步驟

  • 客戶端向服務端發(fā)起請求,請求參數(shù)包含要下載文件的名稱
  • 服務器接收到客戶端請求后把文件設(shè)置到響應對象中,響應給客戶端瀏覽器

載時需要設(shè)置的響應頭信息

  • Content-Type: 內(nèi)容MIME類型

application/octet-stream 任意類型

  • Content-Disposition:客戶端對內(nèi)容的操作方式

inline 默認值,表示瀏覽器能解析就解析,不能解析下載
attachment;filename=下載時顯示的文件名 ,客戶端瀏覽器恒下載

html代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
? ? ? ? "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
? ? <title>文件下載</title>
</head>
<body>

<a href="download?filename=abc.png">下載</a>
</body>
</html>

go語言代碼如下:

package main

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

func test2(w http.ResponseWriter, r *http.Request) ?{
?? ?t,_:=template.ParseFiles("view/index5.html")
?? ?t.Execute(w,nil)

}
func downlaod(w http.ResponseWriter, r *http.Request) ?{
?? ?filename:=r.FormValue("filename")
?? ?f,err:=ioutil.ReadFile("D:/gofile/"+filename)
?? ?if ?err!=nil{
?? ??? ?fmt.Fprintln(w,"文件下載失敗",err)
?? ??? ?return
?? ?}
?? ?h:=w.Header()
?? ?h.Set("Content-type","application/octet-stream")
?? ?h.Set("Content-Disposition","attachment;filename="+filename)
?? ?w.Write(f)
}
func main() {
server:=http.Server{Addr: ":8090"}
http.HandleFunc("/",test2)
http.HandleFunc("/download",downlaod)
server.ListenAndServe()
}

首先,現(xiàn)在D盤中新建文件夾–gofile,再在gofile中存入圖片:

在這里插入圖片描述

點擊下載后,效果截圖:

在這里插入圖片描述

當然,這是下載已經(jīng)存在的,如果下載不存在的文件,那會顯示什么呢?

html代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
? ? ? ? "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
? ? <title>文件下載</title>
</head>
<body>

<a href="download?filename=abc123.png">下載</a>
</body>
</html>

則會顯示open D:/gofile/abc123.png: The system cannot find the file specified.

在這里插入圖片描述

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

相關(guān)文章

  • golang調(diào)用shell命令(實時輸出,終止)

    golang調(diào)用shell命令(實時輸出,終止)

    本文主要介紹了golang調(diào)用shell命令(實時輸出,終止),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 一文帶你了解如何正確理解和使用Golang中nil

    一文帶你了解如何正確理解和使用Golang中nil

    在?Golang?中,nil?是一個預定義的標識符,在不同的上下文環(huán)境中有不同的含義,但通常表示“無”、“空”或“零值”,本文主要來帶大家了解下nil的正確使用,需要的可以參考下
    2023-12-12
  • Golang中重復錯誤處理的優(yōu)化方法

    Golang中重復錯誤處理的優(yōu)化方法

    這篇文章主要給大家介紹了關(guān)于Golang中重復錯誤處理優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Golang具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • go語言中struct標簽詳解

    go語言中struct標簽詳解

    這篇文章主要給大家介紹了關(guān)于go語言中struct標簽的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用go語言具有一定的參考學習價值,需要的朋友可以參考下
    2023-07-07
  • Go代碼檢查的推薦工具及使用詳解

    Go代碼檢查的推薦工具及使用詳解

    這篇文章主要為大家介紹了Go代碼檢查的推薦工具及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Go單體服務開發(fā)最佳實踐總結(jié)

    Go單體服務開發(fā)最佳實踐總結(jié)

    這篇文章主要介紹了Go單體服務開發(fā)最佳實踐,通過本文詳細跟大家分享一下如何使用?go-zero?快速開發(fā)一個有多個模塊的單體服務,需要的朋友可以參考下
    2022-04-04
  • 使用Golang實現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析

    使用Golang實現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析

    在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡(luò)流量的方法,用于獲取網(wǎng)絡(luò)數(shù)據(jù)包并對其進行分析,本文將介紹如何使用Golang實現(xiàn)抓包功能,包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下
    2023-11-11
  • 簡單講解Go程序中使用MySQL的方法

    簡單講解Go程序中使用MySQL的方法

    這篇文章主要介紹了Go程序中使用MySQL的方法,需要使用第三方包來進行連接,需要的朋友可以參考下
    2015-10-10
  • GO 切片刪除元素的三種方法

    GO 切片刪除元素的三種方法

    本文主要介紹了GO 切片刪除元素,根據(jù)要刪除元素的位置有三種情況,分別是從開頭位置刪除、從中間位置刪除和從尾部刪除,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • golang 調(diào)用c語言動態(tài)庫方式實現(xiàn)

    golang 調(diào)用c語言動態(tài)庫方式實現(xiàn)

    本文主要介紹了golang 調(diào)用c語言動態(tài)庫方式實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

霍州市| 泗洪县| 梁河县| 华池县| 通海县| 内乡县| 通许县| 佳木斯市| 墨脱县| 道真| 汉源县| 高要市| 高要市| 来宾市| 清苑县| 泰安市| 绿春县| 西乌珠穆沁旗| 通海县| 巴东县| 稷山县| 阜阳市| 通江县| 丰城市| 泸溪县| 阿坝县| 东至县| 连云港市| 安庆市| 新干县| 南澳县| 长春市| 东阳市| 渝中区| 平安县| 扶绥县| 泗阳县| 恩施市| 南阳市| 中西区| 富宁县|