欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【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的FileUpload类实现上传文件实例的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 【Visual】分享Visual Studio原生开发的10个调试
- 【全局】.net全局定时定期执行某些操作在Global.a
- 【asp】asp.net ubb使用代码-net-ubb使用
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
