视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET MVC HttpPostedFileBase文件上传的实例代码
2020-11-27 22:35:29 责编:小采
文档


本文介绍了ASP.NET MVC HttpPostedFileBase文件上传 ,分享给大家,希望对大家有帮助

HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存

文件传输信息封装

/// <summary>
 /// 文件生成方式
 /// </summary>
 public class UpFileMessage
 {
 /// <summary>
 /// 文件名
 /// </summary>
 public string OriginalFileName { get; set; }

 /// <summary>
 /// 是否保存略缩图
 /// </summary>
 public bool IsImage { get; set; }

 /// <summary>
 /// 文件流
 /// </summary>
 public Stream FileStream { get; set; }

 /// <summary>
 /// 生成缩略图的方式
 /// [WH]-指定宽高
 /// [H]-指定高,按比例缩放宽
 /// [W]-指定宽,按比例缩放高
 /// </summary>
 public string Mode { get; set; }

 /// <summary>
 /// 略缩图高度
 /// </summary>
 public int? ThumbHeight { get; set; }

 /// <summary>
 /// 略缩图宽度
 /// </summary>
 public int? ThumbWidth { get; set; }

 }

文件上传返回结果

/// <summary>
 /// 文件上传返回结果
 /// </summary>
 public class UpFileResultMessage
 {
 /// <summary>
 /// 文件保存是否成功
 /// </summary>
 public bool IsSuccess { get; set; }

 /// <summary>
 /// 错误消息
 /// </summary>
 public string Message { get; set; }

 /// <summary>
 /// 原始文件名-(无扩展名)
 /// </summary>
 public string FileName { get; set; }

 /// <summary>
 /// 文件名扩展名
 /// </summary>
 public string FileSuffix { get; set; }

 /// <summary>
 /// 文件名保存路径
 /// </summary>
 public string FilePath { get; set; }

 /// <summary>
 /// 文件类型为图片时
 /// 缩略图保存路径
 /// </summary>
 public string ThumbPath { get; set; }

 /// <summary>
 /// 保存文件名(无扩展名)
 /// </summary>
 public string SaveFileName { get; set; }

 /// <summary>
 /// 文件自增ID
 /// </summary>
 public int[] FileIdArray { get; set; }
 }

文件上传类库

需引用System.Web命名空间,并对 [System.Web.UI.Page] 进行继承,调用Server.MapPath方法

public class FileUtil : System.Web.UI.Page
 {
 /// <summary>
 /// 图片上传
 /// </summary>
 /// <param name="fileMessage">文件生成方式</param>
 /// <returns></returns>
 public UpFileResultMessage UpLoadFile(UpFileMessage fileMessage)
 {
 try
 {
 string now = DateTime.Today.ToString("yyyyMMdd");
 string guid = Guid.NewGuid().ToString();

 //获取文件扩展名
 var fileSuffix = Path.GetExtension(fileMessage.OriginalFileName);

 var uploadFolder = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(ParmsConfig.UpFilePathUrl), now);

 if (!Directory.Exists(uploadFolder))
 {
 Directory.CreateDirectory(uploadFolder);
 }

 //保存文件名
 string saveFileName = guid + fileSuffix;
 string filePath = Path.Combine(uploadFolder, saveFileName);


 UpFileResultMessage upFileResult = new UpFileResultMessage()
 {
 IsSuccess = true,
 FileName = Path.GetFileNameWithoutExtension(fileMessage.OriginalFileName),
 FileSuffix = fileSuffix,
 FilePath = string.Format(@"{0}/{1}", ParmsConfig.UpFileIPAddressUrl, now),
 SaveFileName = guid
 };

 using (Stream sourceStream = fileMessage.FileStream)
 {
 using (FileStream targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
 {
 const int bufferLen = 1024 * 4;//4KB
 byte[] buffer = new byte[bufferLen];
 int count = 0;
 while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
 {
 targetStream.Write(buffer, 0, count);
 }
 }
 //上传文件为图片时,需创建缩略图
 if (fileMessage.IsImage)
 {
 var uploadThumbFolder = Path.Combine(uploadFolder, "Thumb");

 if (!Directory.Exists(uploadThumbFolder))
 {
 Directory.CreateDirectory(uploadThumbFolder);
 }
 using (FileStream targetStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
 {
 System.Drawing.Image image = System.Drawing.Image.FromStream(targetStream);
 int width = image.Width;
 int height = image.Height;
 int thumbWidth = 0;
 int thumbHeight = 0;
 switch (fileMessage.Mode)
 {
 case "WH": //指定高宽缩放(可能变形) 
 thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : 200;
 thumbHeight = fileMessage.ThumbHeight.HasValue ? fileMessage.ThumbHeight.Value : 200;
 break;
 case "W": //指定宽,高按比例 
 thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : 200;
 thumbHeight = height * thumbWidth / width;
 break;
 case "H": //指定高,宽按比例
 thumbHeight = fileMessage.ThumbHeight.HasValue ? fileMessage.ThumbHeight.Value : 200;
 thumbWidth = width * thumbHeight / height;
 break;
 default:
 thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : 200;
 thumbHeight = height * thumbWidth / width;
 break;
 }
 string thumbFilePath = Path.Combine(uploadThumbFolder, saveFileName);
 CreateThumbnail(thumbFilePath, targetStream, thumbWidth, thumbHeight);
 upFileResult.ThumbPath = string.Format(@"{0}/{1}/Thumb", ParmsConfig.UpFileIPAddressUrl, now);
 }
 }
 }

 return upFileResult;
 }
 catch (Exception ex)
 {
 return new UpFileResultMessage() { IsSuccess = false, Message = ex.Message };
 }

 }

 /// <summary>
 /// 创建指定图片文件流的缩略图
 /// </summary>
 /// <param name="thumbFilePath">缩略图文件保存路径</param>
 /// <param name="fileStream">原始文件流</param>
 /// <param name="width">缩略图宽</param>
 /// <param name="height">缩略图高</param>
 private void CreateThumbnail(string thumbFilePath, Stream fileStream, int width, int height)
 {
 using (Image image = Image.FromStream(fileStream))
 {
 using (Image thumbnail = image.GetThumbnailImage(width, height, null, IntPtr.Zero))
 {
 thumbnail.Save(thumbFilePath);
 }
 }

 }

 }

调用方式

var upFileMsg = new UpFileMessage()
 {
 IsImage = true,
 OriginalFileName = platformImg[i].FileName,
 FileStream = platformImg[i].InputStream,
 ThumbWidth = ThumbWidth,
 Mode = "W"
 };
 var upFileResultMsg = new FileUtil().UpLoadFile(upFileMsg);

代码地址:文件上传类库包.zip 

下载本文
显示全文
专题