重构 dnd file 的实现