VB.Net:如何在<input type =“file”... =“”/>上传文件

时间:2015-04-07 21:36:49

标签: html vb.net


我正在尝试制作一个Windows窗体程序,以自动将文件上传到网站 该网站在input type="file">标记中有一个“浏览...”按钮,我InvokeMember("click")触发了文件选择器,但我无法与之互动。

我不熟悉那种控制。我试过SendKeys.Send("quotes.html") : SendKeys.Send(Chr(13)),但没有成功。只有在我手动关闭文件选择器后才会执行SendKeys.Send命令。

有没有人知道如何使用VB.NET在此<input type="file">控件中选择文件?

编辑#1 /08.04.2015 13:00 /:

我上传文件的网络服务是第三方应用程序,我无法修改。我只想与它进行交互,以便我的应用程序可以通过与弹出的文件上传表单进行交互来自动上传文件,但是我不知道该怎么做。

我的程序代码部分是:

For Each OneElement In WebBrowser1.Document.GetElementsByTagName("input")
 If OneElement.GetAttribute("type") = "file" Then
    If OneElement.GetAttribute("name") = "file[]" Then
'Clicking the "Browse" button of the input type="file"
      OneElement.InvokeMember("click")
      'MsgBox("Here#13")
'Trying to fill in the "FileName:" textbox of the popup form
      SendKeys.Send( _
            "strig with the file address - e.g.: C:\Folder\File.html")
'Trying to click the open button, which is in focus
      SendKeys.Send(Chr(13))
    End If
    Exit For
  End If
Next

For Each OneElement In WebBrowser1.Document.GetElementsByTagName("input") If OneElement.GetAttribute("type") = "file" Then If OneElement.GetAttribute("name") = "file[]" Then 'Clicking the "Browse" button of the input type="file" OneElement.InvokeMember("click") 'MsgBox("Here#13") 'Trying to fill in the "FileName:" textbox of the popup form SendKeys.Send( _ "strig with the file address - e.g.: C:\Folder\File.html") 'Trying to click the open button, which is in focus SendKeys.Send(Chr(13)) End If Exit For End If Next


如上所述,仅在文件上传弹出窗口关闭后执行。

编辑#2:已解决! /14.04.2015 21:00 /:

解决方案是创建一个新的线程:

SendKeys.Send

...
Dim tr As New System.Threading.Thread(AddressOf SendK)
tr.Start()
OneElement.InvokeMember("click")
tr.Abort()
...
Private Sub SendK()
Threading.Thread.Sleep(2000) ' could be less
SendKeys.SendWait("C:\TheFilePath.html") 'the file address path
SendKeys.SendWait(Chr(13))
End Sub


对于那些想要升级它的人来说,因为它是一个原始的解决方案:
1.可能是新线程可以与按钮的onclick事件相关联;

2 个答案:

答案 0 :(得分:1)

这里的情况相同:how to upload files with asp-classic

所以你想做的事情很简单。您可以像在OneFineDay提供的链接中一样设置html表单。

<form action="demo_form.asp">
<input type="file" name="pic" accept="image/*">
<input type="submit">
</form>

然后设置脚本。例如:

Dim objUpload 
Dim strFile, strPath
' Instantiate Upload Class '
Set objUpload = New clsUpload
strFile = objUpload.Fields("file").FileName
strPath = server.mappath("/data") & "/" & strFile
' Save the binary data to the file system '
objUpload("file").SaveAs strPath
Set objUpload = Nothing

只需稍微玩一下就可以了解它。

答案 1 :(得分:1)

我正在寻找的解决方案是:

...
Dim tr As New System.Threading.Thread(AddressOf SendK)
tr.Start()
OneElement.InvokeMember("click")
tr.Abort()
...
Private Sub SendK()
Threading.Thread.Sleep(2000) ' could be less
SendKeys.SendWait("C:\TheFilePath.html") 'the file address path
SendKeys.SendWait(Chr(13))
End Sub

通过添加新线程,我终于可以与input type="file">表单进行交互,并使用SendKeys.SendWait("path as string")在我的PC上发送一个包含文件地址路径的字符串。 / p>