Orange 内置了文件上传模块,通过简单配置就能快速进行文件上传操作。

# 配置

[app]
   ...
    [app.upload]
        storage = "./storage/allimg" //文件存放路径
        maxSize = 2096157 // 文件大小限制
        ext = ["jpg"] //文件格式过滤

# 上传操作

上传请求请将表单类型配置成 multipart/form-data

# 上传并自动存储到本地

// 在控制器方法中添加如下代码
func Upload(c *app.Context) error {
    
   // 文件表单名称 file
  // path 返回的是文件存储的相对路径
   path, err := c.AppUpload("file")

   if err != nil {
      return c.ToString(err.Error())
   }

   return c.ToJson(map[string]interface{}{
      "info": "upload success",
      "path": path,
   })
}

# 上传并返回数据对象

很多时候我们上传后的文件不希望直接存储到本地,比如我们希望将文件发送到阿里云 / 腾讯云对象存储,图片鉴别等服务,我们可以通过如下方法获取上传后的文件 byte 数据,然后我们可以使用 byte 数据进行我们的业务操作。

// 在控制器方法中添加如下代码
func Upload(c *app.Context) error {
    
   // 文件表单名称 file
  // fileInfo 返回的是文件上传成功后的一个结构体数据
   fileInfo, err := c.AppUploadToData("file")

   if err != nil {
      return c.ToString(err.Error())
   }

   //  获取文件 byte 数据
   fileByte := fileInfo.FileByte
   ...
}