业务场景:一文件管理系统,用来处理客户上传下载附件的,主要处理方式为:客户端上传文件到服务器,通过中间层HTTP或TCP进行数据传输,在将数据传输到服务器之后,系统接收文件并保存到指定目录,同时在数据库中保存文件相关信息,如名称、类型、大小、上传服务器IP等信息,下载时,根据保存的附件信息拼接相应的下载链接;增加服务器IP字段,是用来判断该文件所保存的服务器地址,默认可以上传到不同的服务器中;
遇到的问题:如果客户服务器所处网络环境较为复杂,既有局域网连接也有外网连接及VPN连接,各个IP端相互之间不存在联系(广域网IP除外,当然有的客户端是禁止连接外网的,所以全部使用外网也是行不通的!),如下图所示:
客户端A上传文件到服务器A中,默认数据库中附件记录的信息是服务器A所在192.168.1网段的地址,如果是相同192.168.1网段的客户端访问文件进行下载,操作没有问题,但是如果客户端B或C想下载A上传的附件信息,根据附件信息中保存的IP拼接出的附件地址是错误的,没法进行下载,同样的B或C上传的附件任意其他非同网段的客户端进行访问时都会出现问题;
目前想到的唯一的处理办法:数据库记录多个IP段的信息,在客户端进行拼接下载时,遍历所有IP,如果可以ping通该IP,则表示可以下载,如果不行则提示404,这么处理虽然临时解决了问题,但是总感觉有点Low,希望各位神通广大的网友可以给出好点的解决问题的处理方式,ORZ,谢谢!!
给Client分个标识符,按客户端区分,不按IP来区分
可以用域名绑定服务器啊,直接存储文件路径,比如 http://servera.data.com/xxx/xxx/xxx/xxxxxxxxxxxx.txt,http://serverb.data.com/xxx/xxx/xxx/xxxxxxxxxxxx.txt
不行的,客户端存在只允许局域网使用不允许访问外网的机器,肯定就没法解析域名了,更别说访问了,这跟用广域网IP统一调用一样
内部网也可以弄域名
没法子了用最蠢的解决方案,遍历所有已存在的IP地址,判断是否可以连通,如果可以连通则进行地址拼接下载