基于拖拽操作实现的PC客户端下载文件的方法与流程

文档序号:14174942阅读:575来源:国知局

本发明涉及文件下载技术领域,具体涉及基于拖拽操作实现的pc客户端下载文件的方法。



背景技术:

对于任意的pc客户端文件管理工具而言,下载文件都是很常见的操作,一般来说,用户在pc客户端下载文件有以下两种方式:

一、用户先选中文件,然后点击pc客户端上对应的下载按钮进行下载。首先用户选中一个文件,点击下载按钮,然后在弹出框选择目标文件夹,最后点击确定即可开始下载,下载完后文件就存放在刚才选择的目标文件夹内。

二、拖拽下载。用户在pc客户端直接拖动文件到文件管理器的指定目录,然后释放即可将文件下载到这个目录。拖拽(draganddrop):拖拽,也叫拖放,是一个用户选中一个对象(比如一个文件),然后拖动这个对象到其他地方的一次过程。在操作系统里边分成了两个操作:拖(drag)和放(drop)。drag操作对应源,drop操作对应目标,有了源和目标才能顺利完成一次拖放,可以通过拖拽实现数据传递,达到良好的交互效果。

方法一虽然实现简单,但是操作的步骤较多,如果用户想要查看刚才下载的文件,还要先打开文件管理器,然后一步一步的进去刚才选中的下载目录,非常繁琐。

方法二实现复杂,主要有两个难点。拖拽文件实际上有两个操作,一个是拖,一个是放。拖操作是在pc客户端上做的,放操作一般是在文件管理器中。因为放操作的对象不是pc客户端,所以对于pc客户端来说,是不知道什么时候进行放操作以及把文件放在了哪个目录下面。

现有的技术方案是:把拖拽拆分成复制和粘贴,拖动文件时为复制,释放时为粘贴。具体如下:当执行拖操作的时候,先在文件管理器的某一个目录内(称为目录a)生成一个临时文件(称为文件b)并且将这个临时文件添加到剪切板中,当用户的鼠标在文件管理器的另一个目录中弹起(称为目录c)时,文件b就会被粘贴到目录c,这个目录c就是我们的目标目录,拖拽的文件最终会存放在这里。至此,我们解决了把文件放在了哪个目录下面的问题,但是什么时候进行放操作的问题还没有解决。我们监听目录a里的文件b,如果发现文件b被剪切走了,这个时间就是我们要的时间,此时就可以执行下载操作了。上述方案利用了剪切板,实现复杂,并且可能会破坏剪切板里原有的数据。



技术实现要素:

为了解决现有技术中的问题,本发明提供一种操作方便的能直接从pc客户端拖拽文件或文件夹到文件管理器的基于拖拽操作实现的pc客户端下载文件的方法。

实现本发明目的的技术方案为:

基于拖拽操作实现的pc客户端下载文件的方法,包括如下步骤:

s1在pc客户端启动时,pc客户端生成实时临时文件夹;

s2将拖放mime数据设置在pc客户端的特定路径,并将该特定路径存放到共享内存中;

s3使用icopyhook暴露出来的接口注册一个拷贝钩子函数;

s4使用拷贝钩子判断源文件的源地址是否与共享内存中的特定路径相同,如果相同,设置标志位为开始移动,然后将目的地址写回到共享内存中,把标志位设为移动完成;如果不相同,设置标志位置为错误;

s5当pc客户端的互斥量为解锁时,先判断标志位是否为已完成,如果是,则开始下载;如果否,结束。

步骤s1中的实时临时文件夹以thin+当前时间戳命名。

所述步骤s4还包括:先判断是否拷贝或移动,如果是,进一步判断路径是否是thin开头的格式;如果否,则结束;

拷贝钩子判断存储路径是否是thin开头的格式,如果是,进一步判断是否与读取共享内存中的文件夹一致;如果否,则结束;

拷贝钩子判断是否与读取共享内存中文件夹一致,如果是,在共享内存中将拖放目的路径写入,并且将拖放的状态设置为已完成;如果否,则结束;

钩子返回识别号,释放互斥锁,即互斥量为解锁。

本发明的有益效果为:

与现有技术相比,本发明的方法支持直接从pc客户端拖拽文件或文件夹到文件管理器,从而实现文件或文件夹的下载。本发明的方法拖拽文件或文件夹时用到了共享内存来存储临时文件夹的路径,采用了icopyhook暴露出来的拷贝钩子函数。

本发明的方法解决了现有技术中无法解决的问题,即什么时候进行放操作,以及将文件放到了哪里。本发明中的拷贝钩子函数中,临时文件夹的移动的时间正是放操作的时间,移动操作的目的地址正是文件的下载地址。

附图说明

图1为本发明实施例中基于拖拽操作实现的pc客户端下载文件的方法流程图。

具体实施方式

图1用以解释本发明,但本发明不限于图1所示的范围内。

如图1所示,本发明基于拖拽操作实现的pc客户端下载文件的方法,包括如下步骤:

s1在pc客户端启动时,pc客户端生成实时临时文件夹;

s2将拖放mime数据设置在pc客户端的特定路径,并将该特定路径存放到共享内存中;

s3使用icopyhook暴露出来的接口注册一个拷贝钩子函数;

s4使用拷贝钩子判断源文件的源地址是否与共享内存中的特定路径相同,如果相同,设置标志位为开始移动,然后将目的地址写回到共享内存中,把标志位设为移动完成;如果不相同,设置标志位置为错误。

s5当pc客户端的互斥量为解锁时,先判断标志位是否为已完成,如果是,则开始下载;如果否,结束。

与现有技术相比,本发明的方法支持直接从pc客户端拖拽文件或文件夹到文件管理器,从而实现文件或文件夹的下载。本发明的方法拖拽文件或文件夹时用到了共享内存来存储临时文件夹的路径,采用了icopyhook暴露出来的拷贝钩子函数。

本发明的方法解决了现有技术中无法解决的问题,即什么时候进行放操作,以及将文件放到了哪里。本发明中的拷贝钩子函数中,临时文件夹的移动的时间正是放操作的时间,移动操作的目的地址正是文件的下载地址。

步骤s1中的实时临时文件夹以thin+当前时间戳命名。

所述步骤s4还包括:先判断是否拷贝或移动,如果是,进一步判断路径是否是thin开头的格式;如果否,则结束;

拷贝钩子判断存储路径是否是thin开头的格式,如果是,进一步判断是否与读取共享内存中的文件夹一致;如果否,则结束;

拷贝钩子判断是否与读取共享内存中文件夹一致,如果是,在共享内存中将拖放目的路径写入,并且将拖放的状态设置为已完成;如果否,则结束;

钩子返回识别号,释放互斥锁,即互斥量为解锁。

本发明的方法采用共享内存来实现。在pc客户端启动的时候,生成一个临时文件夹,名称为thin+当前时间戳,设置拖放mime数据为text/uri-list:file:///临时文件夹,将这个路径“file:///临时文件夹”存放到共享内存中。然后使用icopyhook暴露出来的接口注册一个钩子函数,有了这个钩子函数之后,所有的文件夹的移动操作都会首先进入到这个钩子函数中,包括移动前面创建的临时文件夹,在这个钩子函数中,比较srcfile源地址是否为共享内存中的那个地址,如果是的话,设置标志位为开始移动,然后将目的地址写回到共享内存中,把标志位设为移动完成,如果不是的话,标志位置为错误。pc客户端那边的互斥量解锁后,会先判断标志位是否为已完成,如果是的话则开始下载。通过这种方式较为巧妙的解决了背景技术中存在的两个问题,即什么时候进行放操作,以及将文件放到了哪里。在这个钩子函数中,临时文件夹的移动的时间正是放操作的时间,移动操作的目的地址正是文件的下载地址。

上述实施例仅为本发明具体实施例,但并不局限于实施例,凡在不脱离本发明构思的情况下,依本申请所做的等效修饰和现有技术添加均视为本发明技术范畴。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1