MVC保存二进制到数据库,并显示文件的方法(图片显示)
通过两篇文章解决了数据库存储图片并显示到View的方法:
http://blog.sina.com.cn/s/blog_6da396a50101639u.html
http://www.cnblogs.com/artech/archive/2012/08/14/action-result-02.html
其中,第一篇虽然有些混乱,但是对我有很大启发,而的第二篇写的就很笼统却比较了然,大体看一下就解决了令我不解的显示方法。
1.当然第一步是Img,我们在View里,给Img的文件来源,加上Action调用:
<img src=@Url.Action("GetImg", new { id = iii.DrId }) />
iii就是我们的对象实例了,这里,我们调用的是当前Controller的GetImg。
2.所以我们之后需要一个Action:
/// <summary>
/// Action:获取图片文件
/// </summary>
public FileContentResult GetImg(int id)
{
var anModel = zService.Find(id);
if (anModel != null)
{
return File(anModel.DrImg, "image/jpg", anModel.DrId.ToString() + anModel.DrName);
}
else
{
return null;
}
}
这里的方法就是拷贝的我最开始提供的文章里的,并未有太多修改,注意一下“File”方法,有三个参数:
FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName)
第一个当然就是读取出来的文件数据了,第二个是要以什么类型展示文件(MimeType),第三个就是要展示到页面的文件,是什么文件名
这里要注意的是,参数3,如果这样自定义的名字,生成的结果好像是:『Id+Name+"~序号"』比如:361我是超人~3.jpg
3.至于怎么存进数据库,其实在链接文章1里有讲解,我用的是MVC和EF,代码就会类似于这样:
3.1前台,View里加Form,注意“enctype”属性,看网上的几个文章,都说要加这个。
@using (Html.BeginForm("Add", "DoctorAdmin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<legend>DoctorInfo</legend> <div class="editor-label">
<span>图片</span>
</div>
<div>
<input type="file" name="imgs" />
</div> <div class="editor-label">
@Html.LabelFor(model => model.DrName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DrName)
</div> <p>
<input type="submit" value="确定" />
</p>
</fieldset>
}
3.2后台,Action和一个获取图片方法。
[HttpPost]
public ActionResult Add(WXG_Doctor pModel)
{
if (pModel == null)
{
return HttpNotFound();
} //获取上传图片
HttpPostedFileBase file1 = Request.Files[];
int error1;
pModel.DrImg = FileUpDown.GetImageByte(out error1, file1, * ); zService.Create(pModel);
return RedirectToAction("Add");
} /// <summary>
/// 获取图片内容
/// </summary>
///<param name="pError">0:正常完成 1:文件大小异常。2:扩展名不支持。</param>
/// <param name="pUpImage">要上传的文件</param>
/// <param name="pFileLength">文件要小于这个大小</param>
/// <returns>图片文件的内容</returns>
public static byte[] GetImageByte(out int pError, HttpPostedFileBase pUpImage, int pFileLength)
{
if (pUpImage.FileName != null)
{
//要上传的文件大小判断
int sFileLength = pUpImage.ContentLength;
if (sFileLength < || sFileLength > pFileLength)
{
pError = ;
return null;
} //获取文件名
string sFilename = System.IO.Path.GetFileName(pUpImage.FileName).ToLower();
//获取upImage文件的扩展名
string extendName = System.IO.Path.GetExtension(sFilename);
//判断是否为图片格式
if (extendName != ".jpg" && extendName != ".jpeg" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png")
{
pError = ;
return null;
} byte[] myData = new Byte[sFileLength];
pUpImage.InputStream.Read(myData, , sFileLength);
pError = ;
return myData;
}
else
{
pError = ;
return null;
}
}
}
其中,返回的状态那个参数,我不知会不会写的很2,而且具体的逻辑也缺乏健壮,请大家不要直接拿来就用了,酌情修改下。
MVC保存二进制到数据库,并显示文件的方法(图片显示)的更多相关文章
- activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败
activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败 具体错误如下 具体 junit测试 结果 :提示如下: 解决方法: 数据库版本不同 无法保存二进制文件到数据库表中!5.5. ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- ASP.NET MVC 4 - 上传图片到数据库
这里演示如何在MVC WEB应用程序如何上传图片到数据库以及如何在WEB页面上显示图片.数据库表对应整个Model类,不单图片数据一个字段,我们从数据表的定义开始: CREATE TABLE [dbo ...
- [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》
[ASP.NET MVC2 系列] [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序> ...
- asp.net将图片转成二进制存入数据库
一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...
- 配置NHibernate将枚举保存为Oracle数据库中的字符串
假设有这样一个枚举: /// <summary> /// 字典项类型 /// </summary> public enum DicItemType { [EnumDescrip ...
- ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制
我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01- ...
- C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”
下面是两段关键代码: /// <summary> /// 将一张图片转换为字节 /// </summary> /// <param name="img" ...
- C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体
//浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...
随机推荐
- 50. Pow(x, n) (recursion)
Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...
- call/apply
call与apply都可以改变this指向,但是传参列表不同. call 任何一种方法都可以.call,借用别人函数,自己用. call只需把实参按照形参的个数传进去,apply只能传一个argume ...
- SNMP协议详解
简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单性,在Inter ...
- What Is a Computer System?
What Is a Computer System? A combination of Five or Six Elements The term computer is used to descri ...
- DispatcherServlet类的分析
突然发现拿博客园来做笔记挺好的,不会弄丢.下面我把DispatcherServlet类的部分源代码复制到这里,然后阅读,把重要的地方翻译一下,该做笔记的地方做下笔记,蹩脚英语. =========== ...
- [转]删除MSSQL所有的约束及表格
--删除所有约束.表.视图等SQL脚本 --############################################### --删除所有外键约束 --################# ...
- docker-3-常用命令(中)
容器命令 1.有镜像才能创建容器,这是根本前提(下载一个CentOS镜像演示) docker pull centos 2.新建并启动容器 docker run [OPTIONS] IMAGE [COM ...
- Axure RP 8 学习记录
一.Axure RP 简介 Axure是一个专业的快速原型设计工具.能够快速创建应用软件或Web网站的线框图.流程图.原型和规格说明文档. 二.Axure RP下载 1.下载安装包 https://w ...
- mobBUS
1.今天听陈刚说起modBUS通信协议,这个还是第一次听说,究竟是什么东东,还是上网查查看吧 2.网上有C语言程序. http://blog.163.com/li_g888@126/blog/stat ...
- 系统优化怎么做-JVM优化之开篇
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...