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 = * ;//4KB
byte[] buffer = new byte[bufferLen];
int count = ;
while ((count = sourceStream.Read(buffer, , bufferLen)) > )
{
targetStream.Write(buffer, , 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 = ;
int thumbHeight = ;
switch (fileMessage.Mode)
{
case "WH": //指定高宽缩放(可能变形)
thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : ;
thumbHeight = fileMessage.ThumbHeight.HasValue ? fileMessage.ThumbHeight.Value : ;
break;
case "W": //指定宽,高按比例
thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : ;
thumbHeight = height * thumbWidth / width;
break;
case "H": //指定高,宽按比例
thumbHeight = fileMessage.ThumbHeight.HasValue ? fileMessage.ThumbHeight.Value : ;
thumbWidth = width * thumbHeight / height;
break;
default:
thumbWidth = fileMessage.ThumbWidth.HasValue ? fileMessage.ThumbWidth.Value : ;
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
ASP.NET MVC HttpPostedFileBase文件上传的更多相关文章
- MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器
MVC图片上传.浏览.删除 1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...
- Asp.net mvc 大文件上传 断点续传
Asp.net mvc 大文件上传 断点续传 进度条 概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这 ...
- ASP.NET MVC之文件上传【一】(八)
前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult ...
- ASP.NET MVC之文件上传【一】
前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult ...
- asp.net mvc 多文件上传
@{ ViewBag.Title = "多文件上传测试"; } <h2>多文件上传测试</h2> <form action="/Demo/I ...
- asp.net mvc下文件上传
典型的文件上传表单 <form action="/File" enctype="multipart/form-data" method="pos ...
- Asp.net mvc 大文件上传 断点续传 进度条
概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...
- 探索Asp.net mvc 的文件上传
(转自:http://www.cnblogs.com/n-pei/archive/2010/10/15/1852635.html) 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Goo ...
- 探索Asp.net mvc 的文件上传(由浅入深)
代码下载:http://files.cnblogs.com/n-pei/mvcfileupload.zip 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Google了很多资料,和大家 ...
随机推荐
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- 【WPF】用三角形网格构建三维图形
虽然WPF只能支持部分三维模型,不过从应用功能开发的角度看,也已经够用了(非游戏开发).WPF 的三维图形,说得简单一点,也就两种而已. 1.把二维对象放到三维空间中,这个应该较为好办,像 Image ...
- 两个同级div等高布局
显示效果: css代码如下 .wrap{ overflow:hidden; } .left{ width:30%; background:#09C; } .right{ width:70%; back ...
- qt编译的基于xlib cairo的桌面程序
在*.pro中添加以下代码: INCLUDEPATH += /usr/include/cairo LIBS += -lX11 -lcairo 在ubuntu16下编译通过
- 美丽的CSS图形和HTML5
1.HTML5基础 文档类型 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "htt ...
- getElementById和querySelector方法的区别
"querySelector 属于 W3C 中的 Selectors API 规范 .而 getElementsBy 系列则属于 W3C 的 DOM 规范" 1.区别 getXXX ...
- 解决jmeter请求不成功或者报403错误
有同学遇到这种情况,jmeter请求一个网站,各项参数填写正确,可是响应是403,同样的请求放在浏览器执行就没有问题: 这是因为被请求的网站做了请求来源过滤,来源不明的请求拒绝访问,我们需要在jmet ...
- 备份Rhythmbox播放器的曲目和播放列表信息
Rhythmbox音乐播放器只能保存单个播放列表,如果在rhythmbox下建了很多播放列表(比如按歌手名分类),每个播放列表下包含一些歌曲,为了避免重装系统后重新建这些播放列表,可以备份下面的文件. ...
- vue-router单页应用简单示例(二)
我们先来理一下思路. 图1:main.js 引入vue,App.vue,router/index.js文件 声明要渲染的Id为app,将App.vue中的模版渲染到入口界面(就是打开localhost ...
- mac os 安装PIP 及异常“”Can't install python module: PyCharm Error: “byte-compiling is disabled, skipping”“”的解决方案
For all who have the same problem, it took me a while to find the solution in a new installation of ...