时间:2021-05-26
本文介绍了ASP.NET MVC HttpPostedFileBase文件上传 ,分享给大家,希望对大家有帮助
HttpPostedFileBase文件上传,支持多文件一次上传,如有图片,则支持略缩图保存
文件传输信息封装
文件上传返回结果
文件上传类库
需引用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); } } } }调用方式
代码地址:文件上传类库包.zip
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了asp.net中MVC借助Iframe实现无刷新上传文件的方法。分享给大家供大家参考。具体实现方法如下:html:复制代码代码如下:选择文件:Ca
小编之前也介绍了许多ASP.NET文件上传的解决案例,今天来个asp.net文件上传大集合。1使用标准HTML来进行图片上传前台代码:使用标准HTML来进行图片
本文实例讲述了Asp.Net的FileUpload类实现上传文件的方法。分享给大家供大家参考。具体功能代码如下:复制代码代码如下:usingSystem;usi
写完asp.net多文件上传后,感觉这种上传还是有很多缺陷,于是。。。(省略一万字,不废话)。这里我没用传统的asp.net,而选择了开源的asp.netcor
最近涉及到用asp.net做上传功能的一个问题,因为asp.net有fileupload的上传控件,但是这个控件上传的文件大小有限,所以根本满足不了需求百度了下