我正在尝试从网站获取所有图片文件,并在图库中显示这些文件。因此,人们可以滚动浏览所有图像,就像我使用localy存储的图像here一样。
经过一些搜索后,我找到this example,但它仅用于单张图片加载,而不是用于此在线目录中的所有图片,使用以下内容。
//Location of image directory with xxx images.
string directoryUrl = "http://www.foo.com/bar";
void DownloadTextures(string url)
{
try
{
WebRequest req = WebRequest.Create(url);
WebResponse response = req.GetResponse();
Stream stream = response.GetResponseStream();
}
catch ( Exception e)
{
print("stuff went wrong: " +e)
}
}
那么如何从在线目录中获取所有图像,这是完成这项工作的正确方法吗?
PS。这一切都在统一引擎中完成,它有一些局限性。
答案 0 :(得分:1)
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
private void Form1_Load(object sender, EventArgs e)
{
string urlAddress = "http://melloniax.com/css/style.css";
string urlBase = "http://melloniax.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string data = "";
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
readStream = new StreamReader(receiveStream);
else
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
data = readStream.ReadToEnd();
response.Close();
readStream.Close();
}
MatchCollection matches = Regex.Matches(data, @"\(..(?<link>[^.]*(\.jpg|\.png|\.gif)) *\)");
for (int a = 0; a < matches.Count; a++)
MessageBox.Show(urlBase + matches[a].Groups["link"].Value);
}
这适用于您的示例,如果您还需要其他任何内容,例如如何从您告诉我的URL中实际保存imgs。
答案 1 :(得分:1)
由于正则表达式以really bad的方式解析html,我认为最好将某些库用于您的目的。 我听说过的最好的是HtmlAgilityPack
如何使用它解析图像的示例,您可以找到here
然后,您可以使用WebClient.DownloadFile方法下载this等图片。请注意,图片链接可能是相对的,因此您也需要处理它。