uploadfile上传图片

配合ASP.NET 2.0提供了FileUpload控件,很容易就可以完成文件上传功能。做了一个简单的上传逻辑,实现了:检查了文件是否存在、自动生成文件名、自动建立上传文件夹、对文件类型作校验等功能。
1using System; 2using System.Collections.Generic; 3using System.Text; 4using System.Web; 5using System.IO; 6using System.Web.Configuration; 7using System.Configuration; 8using System.Web.Security; 9using System.Web.UI.WebControls; 10namespace QmxMovieBLL 11 12{ 13 public class UploadFileBLL 14 { 15 string filePath = ConfigurationManager.AppSettings["UploadImages"].ToString(); 16 private string GenerateRefUploadFileName(string ext) 17 { 18 string fileName;//初始文件名 19 string hashedFileName;//加密过的文件名 20 string refUploadDest;//最终上传地址(映射过的) 21 int count = 0; 22 do 23 { 24 if(count++>=32767) throw new Exception("生成文件名失败,请重新进行此操作!");//防止死循环 25 fileName = DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString(); 26 hashedFileName = FormsAuthentication.HashPasswordForStoringInConfigFile(fileName, "MD5"); 27 refUploadDest =Path.Combine(filePath, hashedFileName); 28 } while (File.Exists(HttpContext.Current.Server.MapPath(refUploadDest))); 29 return refUploadDest+ext; 30 } 31 32 private bool CanUpload(string ext) 33 { 34 //TODO:是否合法的扩展名 35 //允许上传的图片格式为jpg/jpeg、png和gif类型 36 if (ext.ToLower() == ".jpg" || ext.ToLower() == ".jpeg" || ext.ToLower() == ".png" 37 || ext.ToLower() == ".gif") 38 { 39 return true; 40 } 41 return false; 42 } 43 44 private bool FileTypeAllowed(FileUpload fu) 45 { 46 //是否合法的文件类型,通过FileUpload的ContentType属性来确定类型 47 string fileType = fu.PostedFile.ContentType.ToString().ToLower(); 48 if (fileType == "image/pjpeg" || fileType == "image/x-png" || fileType == "image/gif") return true; 49 return false; 50 51 } 52 53 public string UploadFile(FileUpload fu) 54 { 55 if (fu.HasFile) 56 { 57 string fileName = fu.FileName; 58 //Response.Write(fu.PostedFile.ContentType.ToString().ToLower()); 59 string ext = Path.GetExtension(fileName).ToLower(); 60 //首先,验证是否可以上传该文件 61 if (!CanUpload(ext)||!(FileTypeAllowed(fu))) 62 { 63 throw new Exception("不是允许的上传文件类型!"); 64 } 65 66 if (!Directory.Exists(HttpContext.Current.Server.MapPath(filePath))) 67 { 68 Directory.CreateDirectory(HttpContext.Current.Server.MapPath(filePath)); 69 } 70 71 string refDest; 72 try 73 { 74 refDest = GenerateRefUploadFileName(ext); 75 } 76 catch (Exception ex) 77 { 78 throw ex; 79 } 80 string realDest = HttpContext.Current.Server.MapPath(refDest); 81 try 82 { 83 fu.SaveAs(realDest); 84 } 85 catch (Exception) 86 { 87 throw new Exception("文件保存出错。请检查上传文件夹是否存在。"); 88 } 89 return refDest; 90 } 91 else 92 { 93 throw new Exception("请选择要上传的文件。"); 94 } 95 } 96 97 } 98}

要实现这个可以用到FileUpload的ContentLength属性,此属性返回要上传文件的字节数。例如,可以写一个方法,设置测试大小限制为10字节:

///

/// 检查文件的大小是否合法 /// /// /// private bool IsUploadSizeFit(FileUpload fu) { const int maxFileSize = 10; if (fu.PostedFile.ContentLength > maxFileSize) return false; return true; }

 

在上文第65行位置插入如下代码:
//如果文件上传大小超过限制,则不允许上传
if (!IsUploadSizeFit(fu))
{
    throw new Exception("文件大小超过允许范围!");
}



上传大文件,有好几种方法:

1、思归的HttpWorkerRequest方法,太难,看不懂:-(

2、利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的。

3、修改web.config文件,但是不能捕获错误。
4、通过ftp的方式上传。服务器需要提供ftp服务。

没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃鱼能聪明点。)

那就仔细专研第三种方式吧!

修改Webcong文件:




         useFullyQualifiedRedirectUrl="true"

         executionTimeout="6000"

         useFullyQualifiedRedirectUrl="false"

     minFreeThreads="8"

     minLocalRequestFreeThreads="4"

      appRequestQueueLimit="100"

      enableVersionHeader="true"

         />



其中与上传有密切关系的是:

maxRequestLength

指示 ASP.NET 支持的最大文件上载大小。

该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。

指定的大小以 KB 为单位。

默认值为 4096 KB (4 MB)。

你可能感兴趣的:(exception,string,asp.net,ext,服务器,system)