1、C#文件上传
创建MyUpload.htm页面,用于测试
<form name="form1" method="post" action="UploadFile.aspx" id="form1"
enctype="multipart/form-data">
<input type="file" id="txtFile" name="picfile" /></br>
<input type="submit" value="上传" />
</form>
创建UploadFile.aspx文件,在UploadFile.aspx.cs键入如下代码:
Random rnd = new Random(); //产生随机数
private string _directory = @"/File/UploadFile"; //目录
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (Request.Files.Count > 0)
{
//判断文件大小
int length = Request.Files[0].ContentLength;
if (length > 1048576)
{
Response.Write("文件大于1M,不能上传");
return;
}
string type = Request.Files[0].ContentType;
string fileExt = Path.GetExtension(Request.Files[0].FileName).ToLower();
//只能上传图片,过滤不可上传的文件类型
string fileFilt = ".gif|.jpg|.php|.jsp|.jpeg|.png|......";
if (fileFilt.IndexOf(fileExt) <= -1)
{
Response.Write("对不起!请上传图片!!");
return;
}
else
{
string fileName = Server.MapPath(_directory) + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + rnd.Next(10, 99).ToString() + fileExt;
Request.Files[0].SaveAs(fileName);
Response.Write("上传成功!");
}
}
}
catch
{
throw new Exception();
}
}
2 、C#文件下载
创建DownloadFile.aspx,在DownloadFile.aspx.cs键入如下方法:
/// <summary>
/// C#文件下载
/// </summary>
/// <param name="filename"></param>
public void MyDownload(string filename)
{
string path = Server.MapPath("/File/"+filename);
if(!File.Exists(path))
{
Response.Write("对不起!文件不存在!!");
return;
}
System.IO.FileInfo file = new System.IO.FileInfo(path);
string fileFilt=".asp|.aspx|.php|.jsp|.ascx|.config|.asa|......"; //不可下载的文件,务必要过滤干净
string fileName = file.Name;
string fileExt = fileName.Substring(filename.LastIndexOf(".")).Trim().ToLower();
if(fileFilt.IndexOf(fileExt)!=-1)
{
Response.Write("对不起!该类文件禁止下载!!");
}
else
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = GetContentType(HttpUtility.UrlEncode(fileExt));
Response.WriteFile(file.FullName);
Response.End();
}
}
/// <summary>
/// 获取下载类型
/// </summary>
/// <param name="fileExt"></param>
/// <returns></returns>
public string GetContentType(string fileExt)
{
string ContentType;
switch (fileExt)
{
case ".asf":
ContentType = "video/x-ms-asf"; break;
case ".avi":
ContentType = "video/avi"; break;
case ".doc":
ContentType = "application/msword"; break;
case ".zip":
ContentType = "application/zip"; break;
case ".xls":
ContentType = "application/vnd.ms-excel"; break;
case ".gif":
ContentType = "image/gif"; break;
case ".jpg":
ContentType = "image/jpeg"; break;
case ".jpeg":
ContentType = "image/jpeg"; break;
case ".wav":
ContentType = "audio/wav"; break;
case ".mp3":
ContentType = "audio/mpeg3"; break;
case ".mpg":
ContentType = "video/mpeg"; break;
case ".mepg":
ContentType = "video/mpeg"; break;
case ".rtf":
ContentType = "application/rtf"; break;
case ".html":
ContentType = "text/html"; break;
case ".htm":
ContentType = "text/html"; break;
case ".txt":
ContentType = "text/plain"; break;
default:
ContentType = "application/octet-stream";
break;
}
return ContentType;
}
*如何获取现有文件的ContentType属性
/// <summary>
/// 获取现有文件的ContentType属性
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public string GetFileContentType(string filename)
{
string[] array = filename.Split('.');
string result = string.Empty;
string suffix = "." + array[array.Length - 1];
Microsoft.Win32.RegistryKey rg = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(suffix);
object obj = rg.GetValue("Content Type");
result = obj != null ? obj.ToString() : string.Empty;
rg.Close();
return result;
}