ASP.NET实现下载文件根据MIME类型自动保存相应类型文件(2)
文件下载
万事俱备,只欠东风了,让我们来完成下载方法:
/// <summary>
/// 下载文件到指定目录,并返回下载后存放的文件路径
/// </summary>
/// <param>网址</param>
/// <param>存放目录,如果该目录中已存在与待下载文件同名的文件,那么将自动重命名</param>
/// <returns>下载文件存放的文件路径</returns>
public string 下载文件(Uri Uri, string 存放目录)
{
var q = WebRequest.Create(Uri).GetResponse();
var s = q.GetResponseStream();
var b = new BinaryReader(s);
var file = 生成下载文件存放路径(存放目录, Uri, q.ContentType);
FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write);
fs.Write(b.ReadBytes((int)q.ContentLength), 0, (int)q.ContentLength);
fs.Close();
b.Close();
s.Close();
return file;
}
代码很简单,就不多说了,我们来完成最后的测试:
[TestMethod]
public void 文件下载测试()
{
var d = @"C:UsersPublicDownloads";
//首次下载
Assert.AreEqual(@"C:UsersPublicDownloadsfiledownload.dhtml", 下载文件(new Uri("http://www.uushare.com/filedownload?user=icesee&id=2205188"), d));
//第二次下载,遇到同名文件,自动重命名
Assert.AreEqual(@"C:UsersPublicDownloadsfiledownload(1).dhtml", 下载文件(new Uri("http://www.uushare.com/filedownload?user=icesee&id=2205188"), d));
//下载一个原本是gif类型的文件
Assert.AreEqual(@"C:UsersPublicDownloads2naqyw8.gif", 下载文件(new Uri("http://i38.tinypic.com/2naqyw8.jpg"), d));
}
结语
相较WebClient而言,WebRequest拥有更好的可控性,在WebClient无解的时候,就尝试让WebRequest上场吧。
下载
范例源代码:http://www.uushare.com/user/icesee/file/2214050
本文的XPS版本:http://www.uushare.com/user/icesee/file/2214051
转载请遵循此协议:署名 - 非商业用途 - 保持一致
并保留此链接:http://skyd.cnblogs.com/