Member 14685181 Ответов: 1

Как захватить путь из файла сохранения элемента управления webbrowser


Я использую форму win с элементом управления WebBrowser для входа в защищенное веб-приложение. войдя в систему, я создаю отчет на основе выбора, сделанного на странице, нажимаю кнопку Отправить, и он загружается в виде файла excel.

то, что я хочу сделать, - это захватить путь к тому месту, где пользователь сохранил файл, чтобы я мог использовать этот файл позже в приложении, не заставляя пользователя снова находить и открывать файл.

Возможно ли это?

Что я уже пробовал:

Я искал часами, но находил только те темы, где люди хотят пропустить диалог или указать путь.

1 Ответов

Рейтинг:
0

clwprogrammer

Это может быть не совсем то, что вы ищете, но дайте этому шанс.

Используйте эти импортные данные

Imports System
Imports System.Net
Imports System.ComponentModel


Поместите внутри класса form, где у вас есть элемент управления webbrowser, где 'WebBrowser1' - это имя вашего элемента управления WebBrowser
Private WithEvents downloadClient As WebClient

Private Sub WebBrowser1_Navigating(sender As Object, e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
    If e.Url.Segments(e.Url.Segments.Length - 1).EndsWith("xlsx") Then
        e.Cancel = True
        Dim filepath As String

        Dim sd As New SaveFileDialog()
        sd.Filter = "Excel Workbook Files|*.xlsx"
        sd.FileName = e.Url.Segments(e.Url.Segments.Length - 1)
        If sd.ShowDialog() = DialogResult.OK Then
            filepath = sd.FileName
            downloadClient = New WebClient
            'downloadclient.DownloadFileCompleted = client_downloadComplete()

            downloadClient.DownloadFileAsync(e.Url, filepath)
            'store the file path here for later use
            Me.Text = filepath
        End If
        sd.Dispose()
    End If
End Sub

Private Sub downloadClient_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles downloadClient.DownloadFileCompleted
    MsgBox("File Downloaded - a")
End Sub


Private Sub downloadClient_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles downloadClient.DownloadProgressChanged
    ProgressBar1.Maximum = e.TotalBytesToReceive
    ProgressBar1.Value = e.BytesReceived
    Application.DoEvents()
End Sub



источник, который я нашел, находится в c#(помечен как выбранный ответ): https://stackoverflow.com/questions/15419632/download-a-file-through-the-webbrowser-control

Редактировать... Заметил небольшую ошибку в которой я забыл инициализировать объект WebClient

Редактировать 2... Вам нужно использовать DownloadFileAsync, чтобы вы могли использовать обновления пользовательского интерфейса в случае, если вы хотите показать какой-то диалог прогресса. Кроме того, добавлен пример progressbar.


Member 14685181

Спасибо за ответ. Я попробовал что-то вроде этого (без индикатора выполнения, это скользко). Это был тот метод, который я хотел использовать, но, к сожалению, я не думаю, что WebClient будет работать по нескольким причинам. Но в основном потому, что нет URL-адреса к файлу. Возвращаемый URL-адрес относится к странице, которая создает файл, а не к файлу.

Как работает веб-страница, пользователь делает несколько выборок на странице и нажимает кнопку "Запустить отчет". Затем веб-страница использует выбранные параметры для запроса базы данных и возвращает результаты в формате xlsx загрузки.