C#文件上传与下载

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;
} 


  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值