• 文件传输遇到的坑


    通过一个管理端配置流程,在一个agent(来源端)扫描文件,传递到另一个agent(目的端):

    问题1.来源端文件被占用,不可读

        描述:文件扫描是可以扫描到该文件的,但该文件可能正在写入或者修改,此时会导致读取文件失败,

        解决:约定文件名,如果正在写入的文件应为特别的后缀。准备发送文件前,应获取文件读权限,如果不能获取,则暂时不要进入发送队列。

    问题2.已进入发送队列的文件被删除

        描述:文件之前已获得了读取权限,但在正式发送的过程中,文件被删除或读取失败。

        解决:若文件不能读,则需要进行延迟发送,重新发送时要比较文件大小或MD5,因为文件可能已经变化了。

                 再次重试文件可能,依旧不能读取,此时需要记录错误日志,并停止该文件的发送

    问题3.目的端文件系统不可写

        描述:文件达到目的端时,文件系统可能已经满了,或者挂载丢失

        解决:应主动跳过该文件,并记录失败日志。停止该文件的发送。

    问题4.断点续传

         描述:因可能存在超大文件,如果网络断连或者系统重启,则需要进行续传,而不能重新发送整个文件

         解决:记录文件已发送的大小,但可能存在丢包的问题,故只能记录目的端已确认接收的部分,如果文件不完整,则需要重发未确认的部分,而不是只发没有发完的部分。

    问题5:补发问题

         描述:若文件发送过程中存在失败、超时。发送端需要重发,但是接收端就可能多次接收到相同的文件或文件块

         解决:需要在接收端考虑去重处理

    问题6:目录软链接问题

         描述:如果目录使用了软链接,则使用file.getAbsolutePath()获取的是文件的真实路径,这样在记录日志时与用户配置的不同。

          解决:需要使用file.getCanonicalPath()进行获取,但要特别注意,文件初始化路径时,不能包含../等信息。需要使用FilenameUtils.normalize(file.getCanonicalPath(), true)处理

  • 相关阅读:
    【MISC】ctf-想要种子吗?——jpg图片隐写
    【MISC】ctf-白哥的鸽子——jpg图片隐写
    关于MySQL递归查询,从子类ID查询所有父类
    关于lambdaQueryWrapper中常用方法
    Jmeter之正则表达式提取器+BeanShell断言--将返回结果导出到本地文件
    SQLMap开源渗透工具-SQLMap注入安全测试
    jmeter之配置元件-HTTP授权管理器(HTTP Authorization Manager)
    Jmeter实战大全(持续更新)
    Jmeter 之Ramp-up Period&固定定时器
    《从一万到一千万没有秘密》
  • 原文地址:https://www.cnblogs.com/maobuji/p/6687892.html
Copyright © 2020-2023  润新知