温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ASP.NET MVC HttpPostedFileBase文件上传的示例分析

发布时间:2021-07-21 14:16:43 来源:亿速云 阅读:245 作者:小新 栏目:开发技术

小编给大家分享一下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);

以上是“ASP.NET MVC HttpPostedFileBase文件上传的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI