.Net中FileUpload控件文件上传与验证实用例子

最简单的fileupload控件上传图片例子

 代码如下 复制代码

using System.IO;
protected void Button1_Click(object sender, EventArgs e)
{
Boolean fileOk = false;
//指定文件路径,pic是项目下的一个文件夹;~表示当前网页所在的文件夹
String path = Server.MapPath("~/");//物理文件路径
//文件上传控件中如果已经包含文件
if (FileUpload1.HasFile)
{
//得到文件的后缀
String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
//允许文件的后缀
String[] allowedExtensions ={ ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
//看包含的文件是否是被允许的文件的后缀
for (int i = 0; i < allowedExtensions.Length; i++)
{
if (fileExtension == allowedExtensions[i])
{
fileOk = true;
}
}
}
if (fileOk)
{
try
{ //文件另存在服务器的指定目录下
FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
Response.Write("<script>alert('文件上传成功!');</script>");
}
catch
{
Response.Write("<script>alert('文件上传失败!');</script>");
}
}
else
{
Response.Write("<script>alert('只能上传gif,png,jpeg,jpg,bmp图象文件!');</script>");
}
}

上面的没做文件大小判断只做了图片类型了,如果要判断大小我们需要如下设置

在web.config中配置:

 代码如下 复制代码

<appSettings>
 <add key="FileType" value=".doc,.xls,.txt,.rar"/>
 <add key="PicTureTye" value=".jpg|.gif|.png|.bmp|.psd|.svg|"/>
 <add key="FileSizeLimit" value="10240"/>
</appSettings>

在.cs文件中方法实现:
 
文件大小判断:

 代码如下 复制代码

public bool IsAllowableFileSize()
{
//从web.config读取判断文件大小的限制
double iFileSizeLimit = Convert.ToInt32(ConfigurationManager.AppSettings["FileSizeLimit"]);
//判断文件是否超出了限制
if (iFileSizeLimit > FileUpload1.PostedFile.ContentLength)
{
Response.Write("文件刚好");
return true;
}
else
{
Response.Write("文件太大");
return false;
}
}

好了,看了上面我们看一个完整的例子

 代码如下 复制代码

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;
}
}
}

上面可以说己完整的介绍了利用 fileupload控件实现的单个文件上传了,如果要多文件上传呢怎么办?我们接着往下看。

同时上载多个文件cs处理代码
 

 代码如下 复制代码
protected void Button1_Click(object sender, EventArgs e)
{
   string filepath = "C:/Uploads";
   //HttpFileCollection类型   HttpFileCollection uploadedFiles = Request.Files;
   
   for (int i = 0; i < uploadedFiles.Count; i++)
   {   
      //HttpPostedFile类型
      HttpPostedFile userPostedFile = uploadedFiles[i];
   
      try
      {   
 if (userPostedFile.ContentLength > 0 )
 {
    Label1.Text += "File #" + (i+1) + "";
    Label1.Text += "File Content Type: " + userPostedFile.ContentType + "";
    Label1.Text += "File Size: " + userPostedFile.ContentLength + "kb";
    Label1.Text += "File Name: " + userPostedFile.FileName + "";
   
    userPostedFile.SaveAs(filepath + "/" + System.IO.Path.GetFileName(userPostedFile.FileName));
    Label1.Text += "Location where saved: " + filepath + "/" + System.IO.Path.GetFileName(userPostedFile.FileName) + "";
 }   
}
catch (Exception Ex)
{   
 Label1.Text += "Error: " + Ex.Message;   
 }   
}   
}

同时多文件上传核心代码是int i = 0; i < uploadedFiles.Count; i++遍历了,其它的与单文件上传没有区别。

时间: 2024-10-25 03:45:58

.Net中FileUpload控件文件上传与验证实用例子的相关文章

aspnet-Asp.net中不用fileupload控件如何上传文件?谢谢!

问题描述 Asp.net中不用fileupload控件如何上传文件?谢谢! Asp.net中不用fileupload控件,在知道客户端待上传的文件路径和文件名,如何上传文件?谢谢! 解决方案 http://bbs.csdn.net/topics/320051989

不用fileUpload控件如何上传文件?

问题描述 不用fileUpload控件如何上传文件? 解决方案 解决方案二:http://hi.baidu.com/kmiaoer/blog/item/da77ceef2b127a37acafd593.html解决方案三:看看~!收藏别人的,对你有帮助~~解决方案四:不用控件你可以开发客户端ActiveX控件来上传,类似现在网易.TOM相册那样的上传方式解决方案五:有好东西!解决方案六:加我QQ66516186发你DEMO解决方案七:用ftp

将复合控件子控件事件上传到顶层的例子将复合控件子控件事件上传到顶层的例子

控件|上传 这是一个选择省份然后将点击事件上传到控件顶层在页面处理事件的一个例子.加粗部分是整个上传事件过程.上传事件(暴露事件).暴露属性.复杂属性管理.样式管理等是asp.net服务器自定义控件的高级主题.using System;using System.Web;using System.Web.UI;using System.Data;using System.Data.SqlClient;using System.Web.UI.WebControls;using System.Comp

vb60-vb 怎么用winsoc控件 ftp上传下载文件

问题描述 vb 怎么用winsoc控件 ftp上传下载文件 急求 vb 怎么用winsock控件 ftp上传下载文件,还有没有其他的做法,简单就好 解决方案 inet 比较简单,winsock有固定API调用,网上很多 InetFTP.UserName = txtusername.Text InetFTP.Password = txtpassword.Text InetFTP.Execute host_name, "Get logxxxx" Do While InetFTP.Still

file控件选择上传文件确定后触发的js事件是哪个

  这篇文章主要介绍了file控件选择上传文件确定后触发了什么js事件,需要的朋友可以参考下 一直以来纠结于这个问题.今天闲来上网搜索了一下这个问题.终于知道答案.是onchange事件.经过本人测试,可用.还有说onpropertychange也可以.经chrome浏览器测试,无效果.不知道是什么原因.  

yii使用activeFileField控件实现上传文件与图片的方法_php实例

本文实例讲述了yii使用activeFileField控件实现上传文件与图片的方法.分享给大家供大家参考,具体如下: yii框架提供了activeFileField控件来完成上传文件(当然也包括了上传图片)的操作,下面介绍yii的activeFileField使用方法. 1.函数原型: 复制代码 代码如下: public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array

ploadify上传控件问题-.NET页面多个Uploadify上传控件,上传失败!

问题描述 .NET页面多个Uploadify上传控件,上传失败! 今天遇到一个很棘手的问题,我一个页面中加了四个Uploadify上传控件.但是点击浏览按钮时选择文件后之后排在最后一个的上传控件可以正常上传文件.其他几个上传控件都选择文件之后均没有反应!也没有报什么js错误,不知道什么原因,有遇到类似此类问题的同行吗?急等大家的指点!!! 解决方案 用fiddler调试下,有没有上传的数据产生,表单名字是什么,等等,看看你是不是脚本写错了.

利用apache的FileUpload组件实现文件上传

1.可以实现一个或多个文件的上传,也可以接收普通的form表单数据. 2.简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以.偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试. 关键点: 1.提交文件上传的form的method属性为post,enctype属性为multipart/form-data. 2.input标签需要有name属性,否则取不到内容. 看看servlet的实现,注释已经很详细了: Java代码 package org.xxm; import j

Node.js开发教程之基于OnceIO框架实现文件上传和验证功能_node.js

OnceIO 是 OnceDoc 企业内容(网盘)的底层Web框架,它可以实现模板文件.静态文件的全缓存,运行起来完全不需要I/O操作,并且支持客户端缓存优化,GZIP压缩等(只在第一次压缩),拥有非常好的性能,为您节约服务器成本.它的模块化功能,可以让你的Web进行分布式存储,即一个扩展包里即包含前端.后端和数据库定义,只需通过添加/删除目录的方式就可实现功能删减,实现真正的模块化扩展.这里是介绍如何使用OnceIO的一系列文章. 在这一章节中,我们将为大家演示如何使用 OnceIO 实现文件