当前位置:编程学习 > C#/ASP.NET >>

asp.net文件上传功能(单文件,多文件,自定义生成缩略图,水印)

答案:前言
上传功能,是大家经常用到了,可能每一个项目都可以会用到。网上到处都有上传功能的代码。比我写的好的有很多。我这里也仅是分享我的代码。
功能实现点
1.单个文件上传;
2.多个文件上传;
3.对于图片等类型的图像,可以自定义生成缩略图大小;
4.文件服务器扩展。
模式
主要使用的是“模板方法”的设计模式。
本文章的功能优缺点
1.可以自定义生成缩略图的大小,任意定义。对于像微生活运动户外商城(http://sports.8t8x.com/) 、淘宝网等的网站,他们需要上传大量的商品图片时,非常有用。
2.缺点,我对System.Drawing的命名空间不太熟练,生成图像的方法还是从网上抄的,我觉得我自己得到的这些生成图像的方法,不是非常好。
代码实现
1.接口定义
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
namespace CCNF.Plugin.Upload
{
/// <summary>
/// 上传功能的接口
/// </summary>
/// <creator>Marc</creator>
public inte易做图ce IUpload
{
/// <summary>
/// 上易做图个文件。
/// </summary>
/// <param name="sourcefile"></param>
/// <returns></returns>
/// <author>Marc</author>
int SaveAs(HttpPostedFile sourcefile);
}
}

2.抽象模板方法类
由于使用代码插入的方式,cnblogs会报错,所以, 我不得不使用原始的copy方式,可能看起来会不太舒服。
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.IO;
using System.Net;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Web;
using System.Collections;
namespace CCNF.Plugin.Upload
{
/// <summary>
/// 上传功能。
/// 本类提供上传的一般性方法。
/// </summary>
/// <creator>Marc</creator>
public abstract class UploadAbstract : IUpload
{
#region 常量属性
/// <summary>
/// 允许上传的文件扩展名。
/// 多个文件扩展名以英文逗号隔开。
/// 默认从Web.config中获取。
/// </summary>
private readonly string UPLOADEXTENTION = ConfigurationManager.AppSettings["UploadExtention"];
private string uploadExtention = null;
/// <summary>
/// 允许上传的文件扩展名。
/// 多个文件扩展名以英文逗号隔开。
/// 默认从Web.config中获取。
/// </summary>
public string UploadExtention
{
get
{
if (string.IsNullOrEmpty(this.uploadExtention))
{
if (string.IsNullOrEmpty(UPLOADEXTENTION))
{
throw new Exception("web.config中未配置UploadExtention属性");
}
this.uploadExtention = UPLOADEXTENTION;
}
return this.uploadExtention;
}
set
{
this.uploadExtention = value;
}
}
/// <summary>
/// 允许上传的单个文件最大大小。
/// 单位为k。
/// 默认从Web.config中获取。
/// </summary>
private readonly int UPLOADLENGTH = Convert.ToInt16(ConfigurationManager.AppSettings["UploadLength"]);
private int uploadLength = 0;
/// <summary>
/// 允许上传的单个文件最大大小。
/// 单位为。
/// 默认从Web.config中获取。
/// </summary>
public int UploadLength
{
get
{
if (this.uploadLength == 0)
{
this.uploadLength = UPLOADLENGTH;
}
return this.uploadLength;
}
set
{
this.uploadLength = value;
}
}
/// <summary>
/// 所上传的文件要保存到哪个物理盘上。
/// 此值为严格的物理文件夹路径。如:E:\CCNF\
/// 注意:必须有盘符。
/// 此属于用于扩展图片服务器数据存储。
/// 默认从Web.config中获取。
/// </summary>
private readonly string UPLOADPHYSICALPATH = ConfigurationManager.AppSettings["UploadPhysicalPath"];
private string uploadPhysicalPath = null;
/// <summary>
/// 所上传的文件要保存到哪个物理盘上。
/// 此值为严格的物理文件夹路径。如:E:\CCNF\
/// 注意:必须有盘符。
/// 此属性用于扩展图片服务器数据存储。
/// 默认从Web.config中获取。
/// </summary>
public string UploadPhysicalPath
{
get
{
if (string.IsNullOrEmpty(this.uploadPhysicalPath))
{
if (string.IsNullOrEmpty(UPLOADPHYSICALPATH))
{
throw new Exception("web.config中未配置UploadPhysicalPath属性");
}
this.uploadPhysicalPath = UPLOADPHYSICALPATH;
}
return this.uploadPhysicalPath;
}
set
{
this.uploadPhysicalPath = value;
}
}
#endregion
#region 枚举
/// <summary>
/// 水印类型
/// </summary>
public enum WatermarkTypeEnum
{
/// <summary>
/// 文字水印
/// </summary>
String = 1,
/// <summary>
/// 图片水印
/// </summary>
Image = 2
}
/// <summary>
/// 上传结果
/// </summary>
protected enum UploadResultEnum
{
/// <summary>
/// 未指定要上传的对象
/// </summary>
UploadedObjectIsNull = -9,
/// <summary>
/// 文件扩展名不允许
/// </summary>
ExtentionIsNotAllowed = -2,
/// <summary>
/// 文件大小不在限定范围内
/// </summary>
ContentLengthNotWithinTheScope = -1,
/// <summary>
/// 未配置或未指定文件的物理保存路径
/// </summary>
UploadPhysicalPathNoSpecify = -20,
/// <summary>
/// 未指定图片水印的相对文件物理路径
/// </summary>
ImageWartermarkPathNoSpecify = -30,
/// <summary>
/// 未指定水印的文字
/// </summary>
StringWatermarkNoSpecify = -31,
/// <summary>
/// 上传原始文件失败
/// </summary>
UploadOriginalFileFailure = 0,
/// <summary>
/// 生成缩略失败
/// </summary>
CreateThumbnailImageFailure = -3,
/// <summary>
/// 未知错误
/// </summary>
UnknownError = -4,
/// <summary>
/// 上传成功
/// </summary>
Success = 1
}
#endregion
#region 上传属性
/// <summary>
/// 保存文件夹。
/// 格式形如: upload\ 或 images\ 或 upload\user\ 等。以\结尾。
/// 不允许加盘符
/// </summary>
public string SaveFolder { get; set; }
/// <summary>
/// 自定义生成新的文件夹。
/// 格式形如: upload\ 或 images\ 或 upload\2011\10\8\ 等。以\结尾。
/// 最终的文件夹 = UploadPhysicalPath + SaveFolder + Folder
/// </summary>
public string Folder { get; set; }
/// <summary>
/// 是否生成水印。
/// 默认不启用水印生成。
/// </summary>
public bool IsMakeWatermark { get; set; }
private int watermarkType = (int)WatermarkTypeEnum.String;
/// <summary>
/// 生成水印的方式:string从文字生成,image从图片生成。
/// 默认是文字水印
/// </summary>
public int WatermarkType
{
get
{
return this.watermarkType;
}
set
{
this.watermarkType = value;
}
}
/// <summary>
/// 水印文字。
/// </summary>
public string Watermark { get; set; }
/// <summary>
/// 水印图片的位置。
/// 提供图片水印的相对位置。
/// 不含盘符。
/// </summary>
public string ImageWartermarkPath { get; set; }
/// <summary>
/// 上传后生成的新文件路径。
/// 此路径为相对物理路径,不含盘符。
/// </summary>
public string NewFilePath { get; protected set; }
/// <summary>
/// 生成缩略图片的长宽, 是一个二维数据。 
/// 如:int a[3,2]={{1,2},{5,6},{9,10}}。
/// 如果上传的文件是图片类型,并且希望生成此图片的缩略图,那么请将

上一个:ASP.net(C#)从其他网站抓取内容并截取有用信息的实现代码
下一个:ASP.NET中各个后缀名的含义介绍

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,