我希望能够从Google Chrome下载到我的应用程序中,但似乎并不是那么简单.我有一个名为gridFiles的DataGridView,以下代码:
Private Sub gridFiles_DragDrop(ByVal sender As Object,ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragDrop If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim DroppedFiles() As String = e.Data.GetData(DataFormats.FileDrop) If Not DroppedFiles Is Nothing Then For Each file As String In DroppedFiles MsgBox(file) Next End If End If End Sub Private Sub gridFiles_DragEnter(ByVal sender As Object,ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.All End If End Sub
当我从Windows资源管理器中删除文件时,一切正常,我收到每个被删除的文件的消息框.但是,当我从Chrome中删除时,没有任何反应.其原因是DroppedFiles等于Nothing.看来e.Data.GetData没有返回任何东西.我已经使用e.Data.GetFormats()检查格式,并返回FileDrop,FileName,FileNameW,如同任何文件丢弃一样.
我相当确定的是,Chrome表示它有一些文件,以便DragEnter功能,但由于尚未下载该文件,DragDrop无法完成,所以Chrome返回任何文件.我怀疑在Windows资源管理器的上下文中,Chrome以某种方式获取该窗口的路径并稍后复制该文件.
所以我的问题是…
我如何愚弄Google Chrome进入我的应用程序?我看到这个工作通过某种方式给Chrome一个临时文件夹,认为它已经放弃了文件,我的应用程序将监视该文件夹的新文件,并在下载后将其拉入.我只需要找到Chrome的“知道”该文件夹的方法.
或者,如果我可以得到被删除的URL,那也是很好的.我可以用我的程序下载文件.
任何和所有的建议是非常感谢.谢谢.
编辑:所以看起来,使用普通的URL,我确实获得了正确的拖放UniformResourceLocator格式.我看到的行为与Gmail中的下载链接有关.它可能发生在别的地方,但我不确定.当gmail附件从Gmail拖到我的应用程序中时,我会收到一个FileDrop.
做更多的挖掘,似乎Gmail正在使用锚标签的download_url属性.我从来没有听说过这个.也许这只是他们添加的额外财产?
无论如何,由于我的应用程序将主要与电子邮件附件一起使用,所以我需要一个幻影FileDrop的工作方法,如上所述.我无法使用间谍.当出现丢失时似乎没有显示任何消息. (我也欢迎就这个问题提出任何建议.)
编辑#2:有关Gmail如何利用拖放文件的更多信息:http://www.thecssninja.com/javascript/gmail-dragout
Drag and Drop between Instances of the same Windows Forms Application
从我自己的经验来看,我似乎记得从浏览器拖放是一个安全问题,因此处理方式不同.希望这可以帮助.
编辑:
也许这回答你的问题: