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文件上传的更多相关文章

  1. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  2. Asp.net mvc 大文件上传 断点续传

    Asp.net mvc 大文件上传 断点续传 进度条   概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这 ...

  3. ASP.NET MVC之文件上传【一】(八)

    前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult ...

  4. ASP.NET MVC之文件上传【一】

    前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult ...

  5. asp.net mvc 多文件上传

    @{ ViewBag.Title = "多文件上传测试"; } <h2>多文件上传测试</h2> <form action="/Demo/I ...

  6. asp.net mvc下文件上传

    典型的文件上传表单 <form action="/File" enctype="multipart/form-data" method="pos ...

  7. Asp.net mvc 大文件上传 断点续传 进度条

    概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...

  8. 探索Asp.net mvc 的文件上传

    (转自:http://www.cnblogs.com/n-pei/archive/2010/10/15/1852635.html) 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Goo ...

  9. 探索Asp.net mvc 的文件上传(由浅入深)

    代码下载:http://files.cnblogs.com/n-pei/mvcfileupload.zip 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Google了很多资料,和大家 ...

随机推荐

  1. Unity运动残影技能

    残影实现: 1.List<DrawMesh> list,此list中包含某一帧动画模型网格.材质 2.每过一段时间就将运动物体的模型add到list中(优化:未实现,网格合并) 3.Lat ...

  2. spring异常处理器

    一.本篇文章旨在讨论异常处理器: 1.因为异常处理器在实战中通常用来处理开发人员自定义的运行时异常,所以如果要了解如何自定义运行时异常,请自行搜索相关资料. 2.本文的demo用IndexOutOfB ...

  3. Java文件流应用:复制文件

    文件复制步骤 代码: package 文件流应用复制文件; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  4. webApi签名验证

    还是一如既往先上结构图如下: 上一讲说明了redis,也谢谢心态的建议.这里经过改进后的redis的地址 当然这里是加密了的,具体实现如下图: 这里提供的解密. 先把加密解密的帮助类放上来. usin ...

  5. Grunt压缩HTML和CSS

    我的小伙伴们!我明明 在压缩图片之前发过一篇,关于Grunt压缩cCSS是和HTML的!但是不知道为什么,今天再一看.迷之消失了! 没办法.只好今天在写一次,从头开始!首先.我来介绍一下为什么要用构建 ...

  6. Chapter 3:Speech Production and Perception

    作者:桂. 时间:2017-05-24  09:09:36 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 一. ...

  7. mac os 安装 python 环境

    1.我们先获取pip安装脚本: 1 wget https://bootstrap.pypa.io/get-pip.py 如果没有安装wget可以去这里将所有内容复制下来,新建get-pip.py文件, ...

  8. [转] DDD领域驱动设计(三) 之 理论知识收集汇总

    最近一直在学习领域驱动设计(DDD)的理论知识,从网上搜集了一些个人认为比较有价值的东西,贴出来和大家分享一下: 我一直觉得不要盲目相信权威,比如不能一谈起领域驱动设计,就一定认为国外的那个Eric ...

  9. Navicat连接报错:cannot load OCI DLL,126

    32位系统下报错:cannot load OCI DLL,126 解决方法:navicat 菜单中 -工具->选项->OCI 选择oracle安装目录下bin里面的oci.dll 在win ...

  10. ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate

    PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言.可以使用它来读取.写入不同格式的电子表格 本次只做数据导出功能的 ...