Golang ECHO文件上傳【9】


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM