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
...
}
```