1. 第一种方案
private void downloadFileWithWebClient(string url)
{
ServicePointManager.DefaultConnectionLimit = 200
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult
}
if (File.Exists(mSaveFilePath))
{
File.Delete(mSaveFilePath)
}
WebClient web = new WebClient()
Console.WriteLine("start to sync download.")
web.DownloadFileAsync(new Uri(url), mSaveFilePath)
web.DownloadFileCompleted += downloadFileCompleted
}
void downloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Console.WriteLine("downloadFileCompleted")
if (mReceiverFileListener != null)
{
mReceiverFileListener.onReceiverSuccess(mTaskId, mSaveFilePath)
}
}
2.第2种方案
public void downloadFile(string url, ReceiverFileListener listener)
{
Console.WriteLine("downloadFile start.....")
mReceiverFileListener = listener
mSaveFilePath = Path.Combine("D:\\receiver\\", "download.zip")
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult)
HttpWebRequest request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url))
request.Method = "GET"
request.UserAgent = DefaultUserAgent
HttpWebResponse response = (HttpWebResponse)request.GetResponse()
Stream responseStream = response.GetResponseStream()
//创建本地文件写入流
Stream stream = new FileStream(mSaveFilePath, FileMode.Create)
//分段写入本地文件
byte[] bArr = new byte[1024]
int size = responseStream.Read(bArr, 0, (int)bArr.Length)
while (size > 0)
{
stream.Write(bArr, 0, size)
size = responseStream.Read(bArr, 0, (int)bArr.Length)
}
stream.Close()
responseStream.Close()
Console.WriteLine("downloadFile end.....")
if (mReceiverFileListener != null)
{
Console.WriteLine("success and callback.")
mReceiverFileListener.onReceiverSuccess(mTaskId, mSaveFilePath)
}
}
3. 使用# SharpZipLib 解压zip文件
public string unZipFile(string TargetFile, string fileDir)
{
string rootFile = " "
try
{
//读取压缩文件(zip文件),准备解压缩
ZipInputStream s = new ZipInputStream(File.OpenRead(TargetFile.Trim()))
ZipEntry theEntry
string path = fileDir
//解压出来的文件保存的路径
string rootDir = " "
//根目录下的第一个子文件夹的名称
while ((theEntry = s.GetNextEntry()) != null)
{
rootDir = Path.GetDirectoryName(theEntry.Name)
//得到根目录下的第一级子文件夹的名称
if (rootDir.IndexOf("\\") >= 0)
{
rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1)
}
string dir = Path.GetDirectoryName(theEntry.Name)
//根目录下的第一级子文件夹的下的文件夹的名称
string fileName = Path.GetFileName(theEntry.Name)
//根目录下的文件名称
if (dir != " " )
//创建根目录下的子文件夹,不限制级别
{
if (!Directory.Exists(fileDir + "\\" + dir))
{
path = fileDir + "\\" + dir
//在指定的路径创建文件夹
Directory.CreateDirectory(path)
}
}
else if (dir == " " && fileName != "")
//根目录下的文件
{
path = fileDir
rootFile = fileName
}
else if (dir != " " && fileName != "")
//根目录下的第一级子文件夹下的文件
{
if (dir.IndexOf("\\") > 0)
//指定文件保存的路径
{
path = fileDir + "\\" + dir
}
}
if (dir == rootDir)
//判断是不是需要保存在根目录下的文件
{
path = fileDir + "\\" + rootDir
}
//以下为解压缩zip文件的基本步骤
//基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。
if (fileName != String.Empty)
{
FileStream streamWriter = File.Create(path + "\\" + fileName)
int size = 2048
byte[] data = new byte[2048]
while (true)
{
size = s.Read(data, 0, data.Length)
if (size > 0)
{
streamWriter.Write(data, 0, size)
}
else
{
break
}
}
streamWriter.Close()
}
}
s.Close()
return rootFile
}
catch (Exception ex)
{
return "1
}
}