zoukankan      html  css  js  c++  java
  • 文件传输遇到的坑

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

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

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

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

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

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

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

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

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

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

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

    问题4.断点续传

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

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

    问题5:补发问题

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

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

    问题6:目录软链接问题

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

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

  • 相关阅读:
    php中数组排序的基本方法
    mysql的锁--行锁,表锁,乐观锁,悲观锁
    php数组内数据个数统计函数
    《自我介绍》
    结对编项目作业
    《结对-英文词频检测程序-需求分析》
    对软件工程课程的期望
    挑战图像处理100问(4)——Otsu
    挑战图像处理100问(3)——二值化
    挑战图像处理100问(2)——灰度化
  • 原文地址:https://www.cnblogs.com/maobuji/p/6687892.html
Copyright © 2011-2022 走看看