ASP.NET 文件上传类 简单好用

调用:

 UploadFile uf = new UploadFile();

        //参数设置
        //uf.SetFilePath=""        设置保存路径,默认为upload
        //uf.SetFileType=".exe"    设置允许的后缀格式,默认为.pdf,.xls,.xlsx,.doc,.docx,.txt
        //uf.SetMaxSizeM=100       设置最大上传大小 默认10M

        //执行保存
        uf.Save("file" /*input file 的 name */ , true); //true会自动处理同名文件,false则覆盖同名文件

        //返回信息
        var isError = uf.GetError;//判段是否上传成功
        var webPath = uf.GetWebFilePath;//返回web路径
        var response = uf.GetMessage;//返回上传信息
        var filePath = uf.GetFilePath;//反回文件路径

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Web;

namespace SyntacticSugar
{
    /// <summary>
    /// ** 描述:单文件上传类 (暂时不支持多文件上传
    /// ** 创始时间:2015-5-27
    /// ** 修改时间:-
    /// ** 作者:sunkaixuan
    /// </summary>
    public class UploadFile
    {

        /// <summary>
        /// 文件保存路径
        /// </summary>
        public string SetFileDirectory { get; set; }
        /// <summary>
        /// 允许上传的文件类型, 逗号分割,必须全部小写!
        ///
        /// 格式: ".gif,.exe" 或更多
        /// </summary>
        public string SetFileType{get;set;}
        /// <summary>
        /// 允许上传多少大小(单位:M)
        /// </summary>
        public double SetMaxSizeM {get;set;}
        /// <summary>
        /// 上传错误
        /// </summary>
        public bool GetError { get; private set; }
        /// <summary>
        /// 消息
        /// </summary>
        public string GetMessage { get; private set; }
        /// <summary>
        /// 文件路径
        /// </summary>
        public string GetFilePath { get; private set; }
        /// <summary>
        /// 网站路径
        /// </summary>
        public string GetWebFilePath { get; private set; }
        /// <summary>
        /// 获取文件名
        /// </summary>
        public string GetFileName { get; private set; }

        public UploadFile()
        {

            SetFileDirectory = "/upload";
            SetFileType = ".pdf,.xls,.xlsx,.doc,.docx,.txt";
            SetMaxSizeM = 10;
        }

        /// <summary>
        /// 单文件上传类
        /// </summary>
        /// <param name="directory">文件保存路径</param>
        /// <param name="fileType">允许上传的文件类型</param>
        /// <param name="maxSizeM">允许上传多少大小(单位:M)</param>
        public UploadFile(string directory, string fileType,double maxSizeM)
        {

            SetFileDirectory =directory;
            SetFileType = fileType;
            SetMaxSizeM = maxSizeM;
        }

        /// <summary>
        /// 保存表单文件
        /// </summary>
        /// <param name="formField"></param>
        /// <param name="isRenameSameFile">值为true 同名文件进行重命名,false覆盖原有文件</param>
        /// <param name="fileName">新的文件名</param>
        /// <returns></returns>
        public string Save(string formField, bool isRenameSameFile, string fileName = null)
        {
            try
            {
                var Response = HttpContext.Current.Response;
                var Request = HttpContext.Current.Request;
                // 获取上传的文件
                HttpFileCollection File = Request.Files;
                HttpPostedFile PostFile = File[formField];

                //文件名
                fileName = string.IsNullOrEmpty(fileName) ? PostFile.FileName : fileName;

                //验证格式
                this.CheckingType(PostFile.FileName);
                //验证大小
                this.CheckSize(PostFile);

                if (GetError) return string.Empty;

                string webDir = string.Empty;
                // 获取存储目录
                var directory = this.GetDirectory(ref webDir);
                var filePath = directory + fileName;
                if (System.IO.File.Exists(filePath))
                {
                    if (isRenameSameFile)
                    {
                        filePath = directory + DateTime.Now.ToString("yyyyMMddhhssms") + "-" + fileName;
                    }
                    else
                    {
                        System.IO.File.Delete(filePath);
                    }
                }
                // 保存文件
                PostFile.SaveAs(filePath);
                GetFilePath = filePath;
                GetWebFilePath = webDir + fileName;
                GetFileName = PostFile.FileName;
                return filePath;
            }
            catch (Exception ex)
            {
                TryError(ex.Message);
                return string.Empty;
            }
        }

        private void CheckSize(HttpPostedFile PostFile)
        {
            if (PostFile.ContentLength / 1024.0 / 1024.0 > SetMaxSizeM)
            {
                TryError(string.Format("对不起上传文件过大,不能超过{0}M!", SetMaxSizeM));
            }
        }

        /// <summary>
        /// 获取目录
        /// </summary>
        /// <returns></returns>
        private string GetDirectory(ref string webDir)
        {
            // 存储目录
            string directory = this.SetFileDirectory;

            // 目录格式
            string Date = DateTime.Now.ToString("yyyy-MM/dd");
            webDir = directory + "/" + Date + ‘/‘;
            string dir = HttpContext.Current.Server.MapPath(webDir);
            // 创建目录
            if (Directory.Exists(dir) == false)
                Directory.CreateDirectory(dir);
            return dir;
        }

        /// <summary>
        /// 验证文件类型
        /// </summary>
        /// <param name="FileName"></param>
        private void CheckingType(string FileName)
        {
            // 获取允许允许上传类型列表
            string[] TypeList = this.SetFileType.Split(‘,‘);

            // 获取上传文件类型(小写)
            string Type = Path.GetExtension(FileName).ToLowerInvariant();
            string Name = Path.GetFileNameWithoutExtension(FileName);
            string NameHash = Name.GetHashCode().ToString();

            // 验证类型
            if (TypeList.Contains(Type) == false)
                this.TryError("文件类型非法!");
        }

        /// <summary>
        /// 抛出错误
        /// </summary>
        /// <param name="Msg"></param>
        private void TryError(string msg)
        {
            this.GetError = true;
            this.GetMessage = msg;
        }
    }
}

  

时间: 2024-10-24 16:55:24

ASP.NET 文件上传类 简单好用的相关文章

ASP.NET 中对大文件上传的简单处理

ASP.NET 中对大文件上传的简单处理 在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的做到多线程的操控和上传进度的显示.笔者在此给大家推荐一款简单易用的上传组件,从而快速便捷得解决了 ASP.NET 中的大文件上传问题. 首先,我们需要下载这个名为 RanUpLoad 的组件,可以去我的百度云盘下载: http://pan.baidu.com

ASP.NET 大文件上传的简单处理

在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的做到多线程的操控和上传进度的显示.在此给大家推荐一款简单易用的上传组件,从而快速便捷得解决了 ASP.NET 中的大文件上传问题. 首先,我们需要这个名为 RanUpLoad 的组件(下面例子中附带),这两个 dll 文件添加到项目的引用中区,xml 文件也要复制在项目中的 bin 文件夹下,也就是

艾恩ASP无组件上传类(上传组件)说明文档(from www.sysoft.cc)

艾恩ASP无组件上传类(上传组件)说明文档2010-1-18 By Anlige一.简介自从接触ASP就开始接触上传,看过一些上传类,但是总感觉封装的还是不够简单,因此自己尝试写一个能够用最少最简单的代码实现各种上传方式的上传类.在学校期间就开始写,一点点的完善.优化,到现在的版本,现在的版本能适应各种上传方式.上传类的主要的功能如下:1.自由设置最大上传大小.单文件最大上传大小2.自由设置允许上传的文件类型3.可设置文本的编码,以适应各种上传环境4.内置进度条,a用户可选择开启和关闭5.多种错

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

面向对象中的文件上传类

<?php /** *文件上传类 * **/ class Upload { //上传到哪个目录 protected $path = './upload/'; //准许的MIME protected $allowmime = ['image/png','image/jpg','image/jpeg','image/pjpeg','image/bmp','image/wbmp','image/gif','image/x-png']; //准许的后缀 protected $allowsubfix = 

PHP文件上传类(页面和调用部分)

<!--upform.html内容--> <form action="upload.php" method="post" enctype="multipart/form-data" > name: <input type="text" name="username" value="" /><br> <input type="

你以为的ASP.NET文件上传大小限制是你以为的吗

我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间.网上有很多这样的例子,但实际情况是否是这样吗? <httpRuntime maxRequestLength="" e

文件上传类

<?php /** file: fileupload.class.php 文件上传类FileUpload 本类的实例对象用于处理上传文件,可以上传一个文件,也可同时处理多个文件上传 */ class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jpg','gif','png'); //设置限制上传文件的类型 private $maxsize = 1000000;

PHP文件上传类

<form action="upload.php" method="post" enctype="multipart/form-data" > name: <input type="text" name="username" value="" /><br> <input type="hidden" name="MAX