我正在C#中构建一个应用程序,它使用Web浏览器打开指向.jpg
的链接(下载它)。
某些浏览器会自动下载,而其他浏览器会打开一个对话框。在默认webBrowser1
上,它显示一个对话框 open save cancel 。我的应用程序有没有办法自动选择 save ?
我在表单中有3个Web浏览器。
webBrowser1 在表单加载时打开一个页面,并有一个按钮:
使用正则表达式在页面上搜索特定链接。然后保存它们
到公共静态数组=> links[]
。
打开webBrowser2
隐藏按钮
隐藏webBrowser1
webBrowser2
在加载时打开第一个链接=> links[0]
在webBrowser2上加载检查它是否包含regex2
如果为true,请使用regex3 =>查找其他链接(.jpg
链接) second_links[]
(只能没有或1)
在 webBrowser3 中打开链接second_links[0]
。 (这个位可能会导致错误,因为它会在webBrowser3保存.jpg
之前返回到第1步。有关如何绕过它的任何想法吗?)
答案 0 :(得分:1)
以下是如何使用HttpClient下载jpeg文件的示例。请注意,这假设VS2012并使用async / await。您需要在项目中引用System.Net.Http来构建它。
using System;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
namespace DownloadSample
{
class Program
{
static async void RunClient(string address)
{
HttpClient client = new HttpClient();
// Send asynchronous request
HttpResponseMessage response = await client.GetAsync(address);
// Check that response was successful or throw exception
response.EnsureSuccessStatusCode();
// Read response asynchronously and save asynchronously to file
using (FileStream fileStream = new FileStream("c:\\temp\\logo.jpg", FileMode.Create, FileAccess.Write, FileShare.None))
{
await response.Content.CopyToAsync(fileStream);
}
}
static void Main(string[] args)
{
string microsoft_logo = "http://c.s-microsoft.com/en-au/CMSImages/mslogo.png?version=856673f8-e6be-0476-6669-d5bf2300391d";
RunClient(microsoft_logo); //"http://some.domain.com/resource/file.jpg");
Console.WriteLine("Check download folder");
Console.ReadLine();
}
}
}
答案 1 :(得分:0)
根据评论中的建议,直接下载文件。
例如:
var client = new HttpClient();
var clientResponse = await client.GetByteArrayAsync(imageUri);
clientResponse
是包含图片的byte[]
。
写入磁盘:
using (var fs = new FileStream("path_to_file", FileMode.Create))
{
fs.Write(clientResponse, 0, clientResponse.Length);
}
答案 2 :(得分:0)
为简单起见,您可以使用以下内容:
var filename = @"C:\image.png";
var url = @"http://www.somedomain.com/image.png";
using (var client = new System.Net.WebClient())
{
client.DownloadFile(url, filename);
}
using (var image = System.Drawing.Image.FromFile(filename))
{
// Do something with image.
}