golang echo處理文件上傳
echo如何處理文件上傳?
在控制器中主要通過echo.Context上下文對象的FormFile函數獲取用戶上傳的文件。
1.單文件上傳
package main
// 引入依賴包
import (
"net/http"
"github.com/labstack/echo"
"os"
"io"
)
func upload(c echo.Context)error{
// 通過echo.Contxt實例的FormFile函數獲取客戶端上傳的單個文件
file,err:=c.FormFile("filename") //filename要與前端對應上
if err!=nil{
return err
}
// 先打開文件源
src,err:=file.Open()
if err!=nil{
return err
}
defer src.Close()
// 下面創建保存路徑文件 file.Filename 即上傳文件的名字 創建upload文件夾
dst,err:=os.Create("upload/"+file.Filename)
if err !=nil {
return err
}
defer dst.Close()
// 下面將源拷貝到目標文件
if _,err=io.Copy(dst,src);err !=nil{
return err
}
return c.String(http.StatusOK,"文件上傳成功")
}
func main(){
// 創建echo實例
e:=echo.New()
// 路由
// 實現一個html頁面 實現頁面渲染路由
e.GET("/",func(c echo.Context)error{
return c.File("index.html")
})
e.POST("/upload",upload)
// 開啟服務
e.Logger.Fatal(e.Start(":1323"))
}
1.2.html視圖代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>上傳單個文件</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
選擇文件: <input type="file" name="filename"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
2.多文件上傳
package main
// 引入依賴包
import (
"net/http"
"github.com/labstack/echo"
"os"
"io"
)
func upload2(c echo.Context)error{
// 與單個文件上傳不一樣的地址是讀取文件
form,err :=c.MultipartForm()
if err!=nil{
return err
}
// files要與前端一致
files:= form.File["files"]
//下面都是一樣,只是在for循環中
// 從upload中拷貝下
for _,file:=range files {
// 先打開文件源
src,err:=file.Open()
if err!=nil{
return err
}
defer src.Close()
// 下面創建保存路徑文件
// file.Filename 即上傳文件的名字 創建文件夾upload2
dst,err:=os.Create("upload2/"+file.Filename)
if err !=nil {
return err
}
defer dst.Close()
// 下面將源拷貝到目標文件
if _,err=io.Copy(dst,src);err !=nil{
return err
}
}
return c.String(http.StatusOK,"多文件上傳成功。")
}
func main(){
// 創建echo實例
e:=echo.New()
// 路由
// 實現一個html頁面 實現頁面渲染路由
e.GET("/files",func(c echo.Context)error{
return c.File("index2.html")
})
// 實現upload2路由方法,upload2與upload 很多相似方法
e.POST("/upload2",upload2)
// 開啟服務
e.Logger.Fatal(e.Start(":1323"))
}
2.2.html視圖代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>多文件上傳</title>
</head>
<body>
<h1>上傳多個個文件</h1>
<!--多文件上傳的路徑為upload2-->
<form action="/upload2" method="POST" enctype="multipart/form-data">
選擇文件: <input type="file" name="files" multiple><br/>
<input type="submit" value="提交">
</form>
</body>
</html>