云存储系统安全升级:

云存储系统安全升级:文件下载接口修改:修改说明:HTTP1.1协议,断点续传(范围请求)技术说明:业务逻辑说明:流程图:

文件下载接口修改:

修改说明:

HTTP1.1协议,断点续传(范围请求)技术说明:

业务逻辑说明:

  1. 所有文件下载接口进来应先解析请求中的参数,从数据库获取FileInfo(含有文件大小、Hash值及FastDFS路径信息)及UserFileInfo(含有文件名)的信息:

    • 若文件不存在则直接抛出ResponseStatusException异常,并设置HttpStatus.NOT_FOUND
  2. 解析Requset Headers中的AcceptRange等信息:

    • Range不为空则调用GenerateStorageClient.downloadFile下载文件片段接口获取文件片段比特流,并且设置响应状态为206
    • Range不为空且范围不合法则直接抛出ResponseStatusException异常,并设置HttpStatus.REQUESTED_RANGE_NOT_SATISFIABLE
    • Range为空则调用GenerateStorageClient.downloadFile下载文件片段接口获取完整文件比特流,并且设置响应状态为200
  3. 根据Requset Headers中的Range设置Response Headers

  4. 根据Requset Headers中的Accept设置Response HeadersContent-Disposition值(详见

  5. 最后设置Content-LengthContent-RangeContent-Type并返回客户端比特流,在这里有一点需要注意下:

    • 若客户端在服务端输出比特流未完成时主动断开,服务端会抛java.io.IOException: 你的主机中的软件中止了一个已建立的连接。异常信息,在这里我们统一捕获不处理,仅输出warn级别日志信息

流程图:

Created with Raphaël 2.2.0客户端请求解析请求参数获取文件信息文件是否存在解析请求头RangeRange是否为空获取文件响应200状态并返回完整文件比特流请求结束Range是否有效获取文件片段响应206状态并返回文件片段比特流抛出416异常抛出404异常yesnoyesnoyesno