Как загрузить файл в память с помощью WebView2?C#

Место общения программистов C#
Ответить
Anonymous
 Как загрузить файл в память с помощью WebView2?

Сообщение Anonymous »

Я хочу загрузить файл в WebView2 в память, а не сохранять его на диск. Однако я не могу найти в WebView2 метод, позволяющий мне делать что-либо, кроме изменения пути, по которому файл будет храниться на диске, т.е.

Код: Выделить всё

formWebView2.webView2.CoreWebView2.Profile.DefaultDownloadFolderPath = filePath;
Это позволяет сохранить его на диск

Код: Выделить всё

TaskCompletionSource downloadTaskCompletionSource = new TaskCompletionSource();
formWebView2.webView2.CoreWebView2.DownloadStarting += delegate (object sender, CoreWebView2DownloadStartingEventArgs args) {
args.DownloadOperation.StateChanged += delegate (object sender, Object e) {
switch (args.DownloadOperation.State) {
case CoreWebView2DownloadState.Completed:
downloadTaskCompletionSource.TrySetResult(true); // Continue when the download is completed
break;
}
};
};

// Click on the DOWNLOAD button
string script = @"(function(){
var status = 'ERROR';
const downloadDataButtons = document.getElementsByClassName('historical-data__controls-button--download historical-download');
if (downloadDataButtons.length == 1) { // Check to make sure there is only one such button
downloadDataButtons[0].click();
status = 'OK';
}
return status;
})();";
string javaScriptResponse = await formWebView2.webView2.ExecuteScriptAsync(script);

await downloadTaskCompletionSource.Task; // Wait for the file to finish downloading
С помощью WebClient вы можете просто использовать MemoryStream и StreamReader, чтобы сохранить файл в памяти и прочитать его из памяти.

Код: Выделить всё

using (MemoryStream memoryStream = new MemoryStream(webClient.DownloadData(url))) {
memoryStream.Position = 0; // Start the memoryStream at the beginning
using (StreamReader streamReader = new StreamReader(memoryStream)) {
for (int lineNumber = 0; lineNumber < memoryStream.Length; lineNumber++) {
String line = streamReader.ReadLine();
}
}
}
Есть ли в WebView2 способ загрузить его в MemoryStream вместо диска? Я мог бы добавить RAM-диск, но, помимо других недостатков, мне пришлось бы выделить много дополнительной оперативной памяти на случай, если пользователь загрузит большой файл.

Подробнее здесь: https://stackoverflow.com/questions/780 ... h-webview2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»