Asp.Net的FileUpload类实现上传文件实例

本文实例讲述了Asp.Net的FileUpload类实现上传文件的方法。分享给大家供大家参考。

具体功能代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI;

using System.Web;

using System.Web.UI.WebControls;

using System.Collections;

using System.Drawing;

using System.Drawing.Imaging;

using System.IO;

namespace CSFramework.BLL {    /// <summary>    /// 支持上传的文件类型    /// </summary>    public enum UploadFileType    {       ArticleAttachment = 1,       Image = 2,       Video = 3,       All = 4    }       /// <summary>    /// 上传文件管理类    /// </summary>    public class CFileUpload    {       private FileUpload _fileUpload;       private string _savePath;       private string _LastUploadedFile = string.Empty;       private bool _AutoGenFileName = false;       private bool _AutoGenWatermark = false;       public string LastUploadedFile { get { return _LastUploadedFile; } }       private string _Error = "";             private string PICTURE_FILE = "[.gif.png.jpeg.jpg]";       private string ZIP_FILE = "[.zip.rar]";       private string MUILT_MEDIA_FILE = "[.mpeg.mpg.fla.wma]";             private int IMG_MAX_WIDTH = 700;//指定宽度       private int IMG_MAX_HEIGHT = 0;//未指定高度       private int MAX_SIZE_UPLOAD = 1024;//最大支持上传小于1MB的文件。             /// <summary>       /// 构造器       /// </summary>       /// <param name="fileUpload">Asp.net FileUpload对象</param>       /// <param name="savePath">保存目录,不包含文件名</param>       /// <param name="autoGenFileName">自动生成文件名</param>       public CFileUpload(FileUpload fileUpload, string savePath, bool autoGenFileName, bool autoGenWatermark)       {          _savePath = savePath;          _fileUpload = fileUpload;          _AutoGenFileName = autoGenFileName;          _AutoGenWatermark = autoGenWatermark;       }             /// <summary>       /// 构造器       /// </summary>       /// <param name="fileUpload">Asp.net FileUpload对象</param>       /// <param name="savePath">保存目录,不包含文件名</param>       public CFileUpload(FileUpload fileUpload, string savePath)       {          _savePath = savePath;          _fileUpload = fileUpload;       }             /// <summary>       /// 上传RAR文件       /// </summary>       public bool UploadRARFile()       {          return DoUpload(ZIP_FILE);       }             /// <summary>       /// 上传视频文件       /// </summary>       public bool UploadVideo()       {          return DoUpload(MUILT_MEDIA_FILE);       }             /// <summary>       /// 上传图片文件       /// </summary>       public bool UploadImage()       {          return DoUpload(PICTURE_FILE);       }             public bool UploadImage(int maxWidth, int maxHeight)       {          this.IMG_MAX_WIDTH = maxWidth;          this.IMG_MAX_HEIGHT = maxHeight;          return DoUpload(PICTURE_FILE);       }             /// <summary>       /// 上传任何支持的文件       /// </summary>       public bool UploadAnySupported()       {          return DoUpload(PICTURE_FILE ZIP_FILE MUILT_MEDIA_FILE);       }             /// <summary>       /// 生成新的文件名       /// </summary>       private string GetNewFileName(string folder, string fileName)       {          if (_AutoGenFileName) //自动生成32位GUID文件名          {             string ext = System.IO.Path.GetExtension(fileName);             string newfile = Guid.NewGuid().ToString().Replace("-", "") ext;             return folder newfile;          }          else          {             if (System.IO.File.Exists(folder fileName))             {                string ext = System.IO.Path.GetExtension(fileName);                string filebody = fileName.Replace(ext, "");                               int x = 1;                while (true) //如果文件存在,生成尾部带(x)的文件                {                   string newfile = folder filebody "(" x.ToString() ")" ext;                   if (!System.IO.File.Exists(newfile))                   return folder filebody "(" x.ToString() ")" ext;                   else                   x ;                }             }             else             return folder fileName;          }       }             /// <summary>       /// 最大支持小于1MB的文件。       /// </summary>       private bool AllowMaxSize(int fileLength)       {          double kb = fileLength / 1024;          return (int)kb < MAX_SIZE_UPLOAD;       }             private bool DoUpload(string allowedExtensions)       {          try          {             bool fileOK = false;                         if (!_fileUpload.HasFile) throw new Exception("没有文件!"); //上传控件中如果不包含文件,退出                         // 得到文件的后缀             string fileExtension = System.IO.Path.GetExtension(_fileUpload.FileName).ToLower();                         // 看包含的文件是否是被允许的文件后缀             fileOK = allowedExtensions.IndexOf(fileExtension) > 0;             if (!fileOK) throw new Exception("不支持的文件格式!");                         //检查上传文件大小             fileOK = AllowMaxSize(_fileUpload.FileBytes.Length);             if (!fileOK) throw new Exception("图片文件不能大于" MAX_SIZE_UPLOAD.ToString() "KB!");                         try             {                // 文件另存在服务器指定目录下                string savefile = GetNewFileName(_savePath, _fileUpload.FileName);                               if (IsUploadImage(fileExtension))//保存图片                {                   System.Drawing.Image output = CImageLibrary.FromBytes(_fileUpload.FileBytes);                                     // 检查图片宽度/高度/大小                   if (this.IMG_MAX_WIDTH != 0 && output.Width > this.IMG_MAX_WIDTH)                   {                      output = CImageLibrary.GetOutputSizeImage(output, this.IMG_MAX_WIDTH);                   }                                     Bitmap bmp = new Bitmap(output);                                     this.CreateDir(Path.GetDirectoryName(savefile));                                     bmp.Save(savefile, output.RawFormat);                   bmp.Dispose();                   output.Dispose();                                     if (_AutoGenWatermark)                   {                      WatermarkImage genWatermark = new WatermarkImage();                      genWatermark.DrawWords(savefile, AppConfig.Current.WatermarkMain,                      AppConfig.Current.WatermarkDesc, float.Parse("0.2"));                   }                }                else//其它任何文件                {                   this.CreateDir(Path.GetDirectoryName(savefile));                                     _fileUpload.PostedFile.SaveAs(savefile);                }                               _LastUploadedFile = savefile;                               return true;             }             catch (Exception ex)             {                throw new Exception("上传文件时发生未知错误!" ex.Message);             }          }          catch (Exception ex)          {             _Error = ex.Message;             return false;          }       }             private void CreateDir(string dir)       {          if (Directory.Exists(dir) == false)          Directory.CreateDirectory(dir);       }             private bool IsUploadImage(string fileExtension)       {          bool isImage = PICTURE_FILE.IndexOf(fileExtension) > 0;          return isImage;       }    } }

希望本文所述对大家的asp.net程序设计有所帮助。