在 Go 中构建文件上传 API
创建文件上传 API 是许多涉及用户提交文档、图像或其他媒体文件的 Web 应用程序的常见要求。在本文中,我们将指导您使用 Go 和 Gin 框架构建安全高效的文件上传 API。您将学习如何设置项目、处理传入文件并安全存储它们,确保您的应用程序能够可靠地管理用户上传的内容。
先决条件
去1.21
设置项目
设置 Go 项目依赖项。
go mod init app go get github.com/gin-gonic/gin
项目结构
├─ main.go ├─ models │ └─ product.go └─ public └─ index.html
项目文件
产品.go
Product 是一个简单的结构,用于在我们的文件上传 API 中测试文件上传。
package models type Product struct { Name string }
主程序
此文件设置文件上传 API。它将创建并设置最小的 Go Web 应用程序。
package main import ( "app/models" "io" "net/http" "os" "path/filepath" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" ) func main() { router := gin.Default() uploadPath := "./public/uploads" os.MkdirAll(uploadPath, os.ModePerm) router.Static("/uploads", uploadPath) router.StaticFile("/", "./public/index.html") router.POST("/submit", func(c *gin.Context) { var product models.Product if err := c.ShouldBindWith(&product, binding.FormMultipart); err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, err.Error()) return } image, _ := c.FormFile("Image") filePath := filepath.Join(uploadPath, image.Filename) src, _ := image.Open() dst, _ := os.Create(filePath) io.Copy(dst, src) c.JSON(http.StatusOK, gin.H{"Name": product.Name, "Image": image.Filename}) }) router.Run() }
- 初始化 Gin 路由器并设置为上传目录和 index.html 提供静态文件服务。
- 确保 ./public/uploads 目录存在用于存储上传的文件。
- 在 /submit 定义一个 POST 路由来处理文件上传,将文件保存到服务器,并返回产品名称和上传的文件名。
- 启动 Gin 服务器来监听传入的请求。
索引.html
此 HTML 表单专为用户上传产品名称以及关联的图像文件而设计。
<!DOCTYPE html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/css/bootstrap.min.css" rel="stylesheet"> <script> function submitForm() { let form = document.getElementById('form') let data = new FormData(form) fetch('submit', { method: 'POST', body: data }).then(res => { res.json().then(result => { let alert = document.getElementById('alert') alert.children[0].innerText = `Upload success!\nName: ${result.Name}\nImage: ${result.Image}` alert.children[1].src = `/uploads/${result.Image}` alert.classList.remove('d-none') form.reset() }) }) return false } </script> </head> <body> <div class="container"> <div class="row mt-3"> <form id="form" onsubmit="return submitForm()"> <div class="mb-3 col-12"> <label class="form-label" for="name">Name</label> <input id="name" name="Name" class="form-control form-control-sm" required /> </div> <div class="mb-3 col-12"> <label class="form-label" for="image">Image</label> <input type="file" accept="image/*" id="image" name="Image" class="form-control form-control-sm" required /> </div> </div> <div class="col-12"> <button class="btn btn-sm btn-primary">Submit</button> </div> </form> <div id="alert" class="alert alert-success mt-3 d-none"> <p></p> <img id="img" width="200px" /> </div> </div> </div> </body> </html>
表单设置为通过JavaScript函数submitForm()提交,该函数在表单提交时触发。另外,还有一个隐藏的提醒部分,可以显示上传的图片以及提交成功后的成功消息。
运行项目
go run main.go
打开网络浏览器并转到http://localhost:8080
你会发现这个测试页。
测试
在输入字段中输入名称并浏览要上传的文件。
点击提交按钮发送表单。然后,您将看到一条成功消息以及从我们的 API 返回的已提交信息。
本质上,Go 与 Gin 框架简化了 Web 应用程序中文件上传的管理。通过使用简单的处理程序和表单设置,您可以有效地处理文件上传并改善项目中的用户体验。
源代码:https://github.com/stackpuz/Example-File-Upload-Go
在几分钟内创建一个 CRUD Web 应用程序:https://stackpuz.com
以上是在 Go 中构建文件上传 API的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Go语言在构建高效且可扩展的系统中表现出色,其优势包括:1.高性能:编译成机器码,运行速度快;2.并发编程:通过goroutines和channels简化多任务处理;3.简洁性:语法简洁,降低学习和维护成本;4.跨平台:支持跨平台编译,方便部署。

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。 Golang以其并发模型和高效性能着称,Python则以简洁语法和丰富库生态系统着称。

Golang和C 在性能上的差异主要体现在内存管理、编译优化和运行时效率等方面。1)Golang的垃圾回收机制方便但可能影响性能,2)C 的手动内存管理和编译器优化在递归计算中表现更为高效。

Golang和C 在性能竞赛中的表现各有优势:1)Golang适合高并发和快速开发,2)C 提供更高性能和细粒度控制。选择应基于项目需求和团队技术栈。

C 更适合需要直接控制硬件资源和高性能优化的场景,而Golang更适合需要快速开发和高并发处理的场景。1.C 的优势在于其接近硬件的特性和高度的优化能力,适合游戏开发等高性能需求。2.Golang的优势在于其简洁的语法和天然的并发支持,适合高并发服务开发。
