在 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 路由处理文件下载,先打开本地文件,然后设置响应头信息,最后将文件内容写入响应体中。

最新文章

  1. 单机多实例Tomcat部署
  2. DSP using MATLAB 示例Example3.7
  3. Linq专题之var关键字
  4. 匿名函数和Lambda表达式
  5. HDU 5592 ZYB's Premutation(树状数组+二分)
  6. 自己手动绿色化MyEclipse
  7. C语言的本质(22)——C标准库之字符串操作
  8. CSS垂直水平居中
  9. MySQL之外键约束
  10. Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单
  11. Java版求1000以内的完全数
  12. mapbox-gl象形文字字体glyph生成
  13. linux上安装php7 memcache扩展 和 安装服务端memcached
  14. js 获取链接参数的方法
  15. android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .
  16. oracle权限管理学习
  17. shell历史简介
  18. C++ MFC Tab Control控件的详细使用
  19. Fastjson和Gson零碎总结
  20. redhat enterprise edition 6.8:禁止ipv6后,nfs文件系统无法挂载:no such device

热门文章

  1. angular 父组件调用子组件方法---以及组件跨模块使用方法
  2. 应用容器引擎-Docker
  3. 函数式编程思想概述-冗余的Runnable代码
  4. 快速入门pandas进行数据挖掘数据分析[多维度排序、数据筛选、分组计算、透视表](一)
  5. Quartz.Net 官方教程 Tutorial 3/3
  6. Java JDK Proxy和CGLib动态代理示例讲解
  7. Pytest插件之pytest-base-url切换测试环境
  8. Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
  9. CentOS7加入AD域(winbind)
  10. Cobaltstrike —— shellcode分析(一)