go iris框架文件上传下载
2024-10-21 11:34:12
在 Iris 框架中,可以使用内置的 iris
包中的 Context
对象来处理文件上传和下载。以下是一个简单的示例代码:
package main import (
"github.com/kataras/iris/v12"
) func main() {
app := iris.New() // 处理文件上传
app.Post("/upload", func(ctx iris.Context) {
file, info, err := ctx.FormFile("file")
if err != nil {
ctx.StatusCode(iris.StatusBadRequest)
ctx.WriteString(err.Error())
return
}
defer file.Close() // 保存文件到本地
err = ctx.SaveFormFile(file, "./uploads/" + info.Filename)
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
ctx.WriteString(err.Error())
return
} ctx.WriteString("文件上传成功")
}) // 处理文件下载
app.Get("/download", func(ctx iris.Context) {
filename := ctx.URLParam("filename") // 打开文件
file, err := os.Open("./uploads/" + filename)
if err != nil {
ctx.StatusCode(iris.StatusNotFound)
ctx.WriteString("文件不存在")
return
}
defer file.Close() // 设置响应头信息
ctx.Header("Content-Disposition", "attachment; filename=" + filename)
ctx.Header("Content-Type", "application/octet-stream")
ctx.Header("Content-Length", strconv.FormatInt(info.Size(), 10)) // 将文件写入响应
_, err = io.Copy(ctx.ResponseWriter(), file)
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
ctx.WriteString(err.Error())
return
}
}) app.Run(iris.Addr(":8080"))
}
上述代码中,/upload
路由处理文件上传,将文件保存到本地的 ./uploads
目录下。/download
路由处理文件下载,先打开本地文件,然后设置响应头信息,最后将文件内容写入响应体中。
最新文章
- 单机多实例Tomcat部署
- DSP using MATLAB 示例Example3.7
- Linq专题之var关键字
- 匿名函数和Lambda表达式
- HDU 5592 ZYB's Premutation(树状数组+二分)
- 自己手动绿色化MyEclipse
- C语言的本质(22)——C标准库之字符串操作
- CSS垂直水平居中
- MySQL之外键约束
- Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单
- Java版求1000以内的完全数
- mapbox-gl象形文字字体glyph生成
- linux上安装php7 memcache扩展 和 安装服务端memcached
- js 获取链接参数的方法
- android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .
- oracle权限管理学习
- shell历史简介
- C++ MFC Tab Control控件的详细使用
- Fastjson和Gson零碎总结
- redhat enterprise edition 6.8:禁止ipv6后,nfs文件系统无法挂载:no such device
热门文章
- angular 父组件调用子组件方法---以及组件跨模块使用方法
- 应用容器引擎-Docker
- 函数式编程思想概述-冗余的Runnable代码
- 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
- Quartz.Net 官方教程 Tutorial 3/3
- Java JDK Proxy和CGLib动态代理示例讲解
- Pytest插件之pytest-base-url切换测试环境
- Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
- CentOS7加入AD域(winbind)
- Cobaltstrike —— shellcode分析(一)