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程序设计有所帮助。