- 一段文件下载伪代码(服务器端)
if (文件存在)
return 文件流;
else
{
1、通过消息队列通知OSS下载组件下载这个本地不存在的文件(这个操作是异步的);
2、响应头加入 refresh , 3秒后重新加载;
return this.Ok(); 返回 http status = 200
}
文件上传服务器后,会自动备份到OSS进行统一保存,本地磁盘也会保存一段时间,但很有可能一段时间后删除。
文件上传后备份到OSS,对于客户端是透明的,文件上传到服务器磁盘后,客户端的上传请求就得到了响应,也就是结束了。
但是客户端请求下载就会出现很多的意外的情况
- 文件压根不存在,不管在服务器磁盘还是OSS
- 文件不存在磁盘,但是存在于OSS
客户端请求下载文件也会有两种方式
- 前台下载,浏览器自动响应处理,比如在浏览器打开PDF,查看图片
- 后台下载,Ajax方式下载,由js 代码响应处理
不管客户端采用的是前台下载,还是后台下载,对于后台服务端都是一样的
模拟下载文件的测试
异常情况1 .文件存在于OSS上,但是不存在于磁盘上,响应信息如下
-
第一次请求
浏览器接收到的响应中包含refresh
会自动3秒后发送第二次请求 -
第二次请求
Content-Type、Content-Length 等都出现了
异常情况2 .文件根本不存在,响应信息如下
-
第一次请求
浏览器接收到的响应中包含refresh
会自动3秒后发送第二次请求 -
第二次请求
这个是一个 404 返回,浏览器停止继续发送请求