Asp.Net的FileUpload类实现上传文件实例_asp.net教程-查字典教程网
Asp.Net的FileUpload类实现上传文件实例
Asp.Net的FileUpload类实现上传文件实例
发布时间:2016-12-29 来源:查字典编辑
摘要:本文实例讲述了Asp.Net的FileUpload类实现上传文件的方法。分享给大家供大家参考。具体功能代码如下:复制代码代码如下:using...

本文实例讲述了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程序设计有所帮助。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新asp.net教程学习
    热门asp.net教程学习
    编程开发子分类