//======================================================================
//
// Copyright (C) 2013 仙剑
// All rights reserved
// guid1: beaa7167-1dd4-423a-89b1-a824572332ea
// CLR Version: 4.0.30319.18063
// Name: DownloadHelper
// Computer: CHARLEY-PC
// Organization: VoiceCyber
// Namespace: VoiceCyber.Common
// File Name: DownloadHelper
//
// created by Charley at 2014/3/22 17:55:05
// http://blog.csdn.net/jian200801
//
//======================================================================
using System;
using System.IO;
using System.Net;
using System.Text;
namespace VoiceCyber.Common
{
/// <summary>
/// 文件下载帮助类,支持http和ftp下载
/// 这是一个静态类
/// </summary>
public static class DownloadHelper
{
/// <summary>
/// FTP方式下载文件
/// </summary>
/// <param name="parameters">
/// 下载参数
/// 0:服务器地址
/// 1:端口
/// 2:登录名(如果为空,则匿名下载)
/// 3:登录密码
/// 4:源文件路径
/// 5:存放路径
/// 6: 如果目标文件已经存在,是否替换文件(可选)
/// </param>
/// <returns></returns>
public static OperationReturn DownloadFileFTP(string[] parameters)
{
OperationReturn optReturn = new OperationReturn();
optReturn.Result = true;
optReturn.Code = Defines.RET_SUCCESS;
try
{
if (parameters == null || parameters.Length < 6)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_PARAM_INVALID;
optReturn.Message = string.Format("Download parameter is null or length invalid.");
return optReturn;
}
string strTargetFile = parameters[5];
string strTargetDir = strTargetFile.Substring(0, strTargetFile.LastIndexOf("\\"));
if (!Directory.Exists(strTargetDir))
{
Directory.CreateDirectory(strTargetFile);
}
if (File.Exists(strTargetFile))
{
if (parameters.Length > 6 && parameters[6] == "1")
{
File.Delete(strTargetFile);
}
else
{
optReturn.Result = false;
optReturn.Code = Defines.RET_FILE_ALREADY_EXIST;
optReturn.Message = string.Format("Target file already exist.\t{0}", strTargetFile);
return optReturn;
}
}
string strRequest = string.Empty;
if (string.IsNullOrEmpty(parameters[2]))
{
strRequest = string.Format("ftp://{0}:{1}/{2}", parameters[0], parameters[1], parameters[4]);
}
else
{
strRequest = string.Format("ftp://{0}:{1}@{2}:{3}/{4}", parameters[2], parameters[3], parameters[0], parameters[1], parameters[4]);
}
FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create(strRequest);
WebResponse ftpWebResponse = ftpWebRequest.GetResponse();
Stream stream = ftpWebResponse.GetResponseStream();
if (stream == null)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_OBJECT_NULL;
optReturn.Message = string.Format("Response stream is null");
return optReturn;
}
using (FileStream fileStream = new FileStream(strTargetFile, FileMode.Create, FileAccess.Write))
{
byte[] buffer = new byte[1024];
int readed = stream.Read(buffer, 0, 1024);
while (readed > 0)
{
fileStream.Write(buffer, 0, readed);
readed = stream.Read(buffer, 0, 1024);
}
fileStream.Close();
stream.Close();
}
optReturn.StringValue = strTargetFile;
}
catch (Exception ex)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_FAIL;
optReturn.Message = ex.Message;
optReturn.Exception = ex;
}
return optReturn;
}
/// <summary>
/// HTTP方式下载文件
/// </summary>
/// <param name="parameters">
/// 下载参数
/// 0:服务器地址
/// 1:端口
/// 2:登录名(如果为空,则匿名下载)
/// 3:登录密码
/// 4:源文件路径
/// 5:存放路径
/// 6: 如果目标文件已经存在,是否替换文件(可选)
/// </param>
/// <returns></returns>
public static OperationReturn DownloadFileHTTP(string[] parameters)
{
OperationReturn optReturn = new OperationReturn();
optReturn.Result = true;
optReturn.Code = Defines.RET_SUCCESS;
try
{
if (parameters == null || parameters.Length < 6)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_PARAM_INVALID;
optReturn.Message = string.Format("Download parameter is null or length invalid.");
return optReturn;
}
string strTargetFile = parameters[5];
string strTargetDir = strTargetFile.Substring(0, strTargetFile.LastIndexOf("\\"));
if (!Directory.Exists(strTargetDir))
{
Directory.CreateDirectory(strTargetFile);
}
if (File.Exists(strTargetFile))
{
if (parameters.Length > 6 && parameters[6] == "1")
{
File.Delete(strTargetFile);
}
else
{
optReturn.Result = false;
optReturn.Code = Defines.RET_FILE_ALREADY_EXIST;
optReturn.Message = string.Format("Target file already exist.\t{0}", strTargetFile);
return optReturn;
}
}
string strRequest = string.Format("http://{0}:{1}/{2}", parameters[0], parameters[1], parameters[4]);
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(strRequest);
if (!string.IsNullOrEmpty(parameters[2]))
{
httpWebRequest.Credentials = new NetworkCredential(parameters[2], parameters[3]);
string code = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", parameters[2], parameters[3])));
httpWebRequest.Headers.Add("Authorization", "Basic" + code);
}
WebResponse httpWebResponse = httpWebRequest.GetResponse();
Stream stream = httpWebResponse.GetResponseStream();
if (stream == null)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_OBJECT_NULL;
optReturn.Message = string.Format("Response stream is null");
return optReturn;
}
using (FileStream fileStream = new FileStream(strTargetFile, FileMode.Create, FileAccess.Write))
{
byte[] buffer = new byte[1024];
int readed = stream.Read(buffer, 0, 1024);
while (readed > 0)
{
fileStream.Write(buffer, 0, readed);
readed = stream.Read(buffer, 0, 1024);
}
fileStream.Close();
stream.Close();
}
optReturn.StringValue = strTargetFile;
}
catch (Exception ex)
{
optReturn.Result = false;
optReturn.Code = Defines.RET_FAIL;
optReturn.Message = ex.Message;
optReturn.Exception = ex;
}
return optReturn;
}
}
}
远程下载帮助类
猜你喜欢
转载自blog.csdn.net/jian200801/article/details/22728393
今日推荐
周排行