服务器图片转到云服务器
1.实现本地图片上传
controller的四个参数
- 请求方式:上传肯定是POST
- 请求路径:/upload/image
- 请求参数:文件,参数名是file,SpringMVC会封装为一个接口:MultipleFile
- 返回结果:这里上传与表单分离,文件不是跟随表单一起提交,而是单独上传并得到结果,随后把结果跟随表单提交。因此上传成功后需要返回一个可以访问的文件的url路径
2.在上传文件过程中,我们需要对上传的内容进行校验:
文件大小在Spring的配置文件中设置
图片地址需要使用另外的url
- 图片不能保存在服务器内部,这样会对服务器产生额外的加载负担
- 一般静态资源都应该使用独立域名,这样访问静态资源时不会携带一些不必要的cookie,减小请求的数据量
hosts : http://image.leyou.com的地址指向本机
Nginx : 限制文件大小 – leyou.conf中的server的外面,设置大小限制为5M
#设置 body内容大小为5M client_max_body_size 5m; server { listen 80; server_name ; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location /api/upload { #路径重写: rewrite "^/(.*)$" /zuul/$1; #"^/(.*)$":匹配路径的正则表达式,用了分组语法,把`/`以后的所有部分当做1组 #/zuul/$1:重写的目标路径,用$1引用前面正则表达式匹配到的分组,在原始路径的基础上,添加了/zuul前缀。 } location / { proxy_pass http://127.0.0.1:10010; proxy_connect_timeout 600; proxy_read_timeout 600; } }3.阿里云对象存储OSS
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
传统文件系统管理的文件就存储在本机。 分布式文件系统管理的文件存储在很多机器,通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问
常见的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)、Fast DFS(淘宝)等。
OSSClient底层使用的是HttpClient,如果每次访问都创建新的客户端,资源浪费较多。我们可以把其注册到Spring,单例来使用。
编写web层请求接口的要素:
- 请求方式:GET
- 请求路径:signature
- 请求参数:无
- 返回结果:应该是一个对象,包含下列属性:
- host:上传到阿里的url路径(bucket + endpoint)
- policy:上传的策略
- signature:签名
- accessId:就是AccessKeyID
- dir:在oss的bucket中的子文件夹的名称,可以不写。
隐藏阿里服务地址
需要一个自定义域名,最好保持与自己的域名一致,如:http://image.leyou.com,然后使用nginx反向代理,最终再指向阿里服务器域名。
首先,修改服务器端返回的请求域名,修改ly-upload中的application.yml文件:
ly: oss: host: http://image.leyou.com然后在nginx中设置反向代理:
server { listen 80; server_name image.leyou.com; location / { proxy_pass http://leyou-shunyi.oss-cn-beijing.aliyuncs.com; } }