亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

一.文件上傳

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

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

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

HTML模版內(nèi)容如下(在項(xiàng)目/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>

服務(wù)端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()
}

效果截圖:

在這里插入圖片描述

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

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>

此時(shí),服務(wù)器端代碼要保存接受的圖片。
服務(wù)器端代碼如下:

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()
}

操作如下圖:

第一步:輸入文件名

在這里插入圖片描述

第二步,選擇文件:

在這里插入圖片描述

第四步:按提交按鈕:

在這里插入圖片描述

最后,上傳成功:

在這里插入圖片描述

我們?cè)賮頇z查一下D盤:

在這里插入圖片描述

上傳成功!

二.文件下載簡介

文件下載總體步驟

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

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

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

application/octet-stream 任意類型

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

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

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中存入圖片:

在這里插入圖片描述

點(diǎn)擊下載后,效果截圖:

在這里插入圖片描述

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

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>

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

在這里插入圖片描述

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

相關(guān)文章

  • Go語言到底有沒有引用傳參(對(duì)比 C++ )

    Go語言到底有沒有引用傳參(對(duì)比 C++ )

    這篇文章主要介紹了Go 到底有沒有引用傳參(對(duì)比 C++ ),需要的朋友可以參考下
    2017-09-09
  • 淺談golang并發(fā)操作變量安全的問題

    淺談golang并發(fā)操作變量安全的問題

    這篇文章主要介紹了淺談golang并發(fā)操作變量安全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 一文帶你了解Go中的內(nèi)存對(duì)齊

    一文帶你了解Go中的內(nèi)存對(duì)齊

    一旦涉及到較為底層的編程,特別是與硬件交互,內(nèi)存對(duì)齊是一個(gè)必修的課題,所以這篇文章小編就想來和大家聊一聊Go語言中的內(nèi)存對(duì)齊,希望對(duì)大家有所幫助
    2023-10-10
  • Golang關(guān)鍵字defer的用法詳解

    Golang關(guān)鍵字defer的用法詳解

    defer是Go里面的一個(gè)關(guān)鍵字,用在方法或函數(shù)前面,作為方法或函數(shù)的延遲調(diào)用。這篇文章主要為大家介紹了defer的簡單使用,需要的可以參考一下
    2023-05-05
  • golang?gorm開發(fā)架構(gòu)及寫插件示例

    golang?gorm開發(fā)架構(gòu)及寫插件示例

    這篇文章主要為大家介紹了golang?gorm開發(fā)架構(gòu)及寫插件的詳細(xì)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • golang提示dial?tcp?172?.217.163.49:443:?connectex:?A?connection?attempt?failed解決

    golang提示dial?tcp?172?.217.163.49:443:?connectex:?A?con

    這篇文章主要為大家介紹了golang提示dial?tcp?172?.217.163.49:443:?connectex:?A?connection?attempt?failed解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • GO語言入門Golang進(jìn)入HelloWorld

    GO語言入門Golang進(jìn)入HelloWorld

    本篇文章是go語言基礎(chǔ)篇,非常適合go語言剛?cè)腴T的小白,主要介紹了GO語言入門Golang進(jìn)入HelloWorld,跟著小編一起來編寫Go語言的第一程序helloworld吧
    2021-09-09
  • golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型

    golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型

    這篇文章主要介紹了golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    這篇文章主要為大家介紹了Go語言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Go操作各大消息隊(duì)列教程(RabbitMQ、Kafka)

    Go操作各大消息隊(duì)列教程(RabbitMQ、Kafka)

    消息隊(duì)列是一種異步的服務(wù)間通信方式,適用于無服務(wù)器和微服務(wù)架構(gòu),本文主要介紹了Go操作各大消息隊(duì)列教程(RabbitMQ、Kafka),需要的朋友可以了解一下
    2024-02-02

最新評(píng)論