# 文件上传
lin-cms 默认集成了文件上传功能,并可自由切换存储位置,前端也有相应的组件匹配使用。
# 使用
lin-cms 默认对外暴露了cms/file/
作为文件上传接口,通过该接口可以直接使用 HTTP
post 方法上传文件。
文件默认会上传到本地,当前工作目录下的 assets 目录。
# 实践
文件上传是开箱即用的,使用 postman 测试一下文件上传:
上传成功后,我们会得到如下的结果:
[
{
key: 'one',
id: 13,
url:
'http://localhost:5000/assets/2019/05/19/3428c02f-dfb5-47a0-82cf-2d6c05285473.png'
},
{
key: 'two',
id: 14,
url:
'http://localhost:5000/assets/2019/05/19/bfcff6f4-8dd7-4dd8-af9d-660781d0e076.jpg'
}
];
由于上传了两个文件,因此我们得到了两个元素的数组,它们的结构如下:
name | 说明 | 类型 |
---|---|---|
key | 文件上传的 key | string |
id | 文件存储到数据库的 id | string |
url | 可访问的 url | string |
TIP
系统会自动帮助我们上传的文件做 md5,因此你大可不必担心文件重复上传,如果你上传了 重复的文件,服务器会返回已传文件的数据。
# 配置
# 本地配置
通过配置文件src/main/java/io/github/talelin/latticy/extensions/file/config.properties
,
可以改变文件上传的行为,配置项如下:
# upload
# 只能从max-file-size设置总体文件的大小
# 上传文件总大小
spring.servlet.multipart.max-file-size=20MB
# 每个文件的大小
lin.cms.file.single-limit=2MB
# 上传文件总数量
lin.cms.file.nums=10
# 禁止某些类型文件上传,文件格式以,隔开
lin.cms.file.exclude=
# 允许某些类型文件上传,文件格式以,隔开
lin.cms.file.include=.jpg,.png,.jpeg
# 文件上传后,访问域名配置
lin.cms.file.domain=http://localhost:5000/
# 文件存储位置,默认在工作目录下的assets目录
lin.cms.file.store-dir=assets/
# 具体实现
lin.cms.file.uploader=local
在每个配置的后面,我们均以注释的方式解释了每项的作用。
当然还需要着重解释一下exclude
和include
这两项配置,默认情况下,这两者只会有一
项生效;若这二者中有一项为空,则另一项不为空的配置会生效;如果两项皆为空的话,会
通过所有文件类型;如果二者都不为空,则include
为有效配置,而exclude
会失效;总
而言之,系统只会支持使用一项,二者都为为空的情况下,则通过所有文件类型。
# 远程配置
将文件上传到本地显然不是一个很好的选择,lin-cms 额外提供了上传到云的支持,只需更改几个配置 即可更换文件上传的存储位置。
目前,我们仅支持七牛云一种,后续会提供更多的选择。
TIP
请确保你已经拥有七牛云的相关服务账号和配置信息。
修改七牛相关配置,如下:
# 七牛云域名
lin.cms.file.domain={domain}
# 七牛
lin.cms.file.qiniuyun.access-key={******&}
lin.cms.file.qiniuyun.secret-key={&******}
lin.cms.file.qiniuyun.bucket={bucket}
# 具体实现
lin.cms.file.uploader=qiniuyun
这里,我们增加了三个配置,分别是 access-key,secret-key 和 bucket,这三个配置 你必须从你的七牛云账号获得,然后将其准确的填写入配置。
另外,我们还需要修改两个配置,一个是文件服务器域名(七牛云配置中的域名),另一个是
uploader 的实现,将LocalUploader
修改为QiniuUploader
。
// io.github.talelin.latticy.extension.file.UploaderConfiguration
@Configuration
public class UploaderConfiguration {
/**
* @return 本地文件上传实现类
*/
@Bean
@Order
@ConditionalOnMissingBean
public Uploader uploader(){
// return new LocalUploader();
return new QiniuUploader();
}
}
配置修改完毕后,文件上传就可以无缝切换到云上了。
WARNING
一定要填写正确的 access-key,secret-key,bucket 以及 domain。