HttpPostedFileBase文件上传实例详解

互联网 18-5-11
这篇文章主要介绍了ASP.NET MVC HttpPostedFileBase文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文介绍了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);

以上就是HttpPostedFileBase文件上传实例详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 实例
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:C#如何使用正则表达式来验证中文字符的案例

相关资讯