通过两篇文章解决了数据库存储图片并显示到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保存二进制到数据库,并显示文件的方法(图片显示)的更多相关文章

  1. activiti 流程部署 保存流程图到数据库 保存二进制图片 存储失败

    activiti 流程部署 保存流程图到数据库  保存二进制图片 存储失败 具体错误如下 具体 junit测试 结果 :提示如下: 解决方法: 数据库版本不同 无法保存二进制文件到数据库表中!5.5. ...

  2. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. ASP.NET MVC 4 - 上传图片到数据库

    这里演示如何在MVC WEB应用程序如何上传图片到数据库以及如何在WEB页面上显示图片.数据库表对应整个Model类,不单图片数据一个字段,我们从数据表的定义开始: CREATE TABLE [dbo ...

  4. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  5. asp.net将图片转成二进制存入数据库

    一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...

  6. 配置NHibernate将枚举保存为Oracle数据库中的字符串

    假设有这样一个枚举: /// <summary> /// 字典项类型 /// </summary> public enum DicItemType { [EnumDescrip ...

  7. ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制

    我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01- ...

  8. C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”

    下面是两段关键代码: /// <summary> /// 将一张图片转换为字节 /// </summary> /// <param name="img" ...

  9. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

随机推荐

  1. Boost智能指针——weak_ptr

    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...

  2. sql 获取每个分组的前N条记录的写法

    SELECT * FROM ( --根据 tb表的name进行分组,根据年龄排序 SELECT * , ROW_NUMBER() OVER ( PARTITION BY name ORDER BY a ...

  3. Dispatch groups 与任务同步

    https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingG ...

  4. Struts2注解 及 约定优于配置

    Struts2注解 1 Struts2注解的作用 使用注解可以用来替换struts.xml配置文件!!! 2 导包 必须导入struts2-convention-plugin-2.3.15.jar包, ...

  5. Git bash 终止git log 命令

    Git bash中 可以通过键入: q ,结束该命令.

  6. luogu U41573 War2

    一道NOIP2018模拟的DayT3 原本没打算做,结果Dukelv秒了(强的过分),就来看看. 状压dp.令dp[i][j]表示在状态 i ,最后选了第 j 个数是的最大分值. 所以我们枚举状态 i ...

  7. 第三章.搭建MyBatis工程环境

    1.数据库的准备: 数据库: create DATABASE mybatis: 数据表: CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREM ...

  8. 1.spring:helloword/注入/CDATA使用/其他Bean/null&级联/p命名空间

    新建工程,导入jar,添加spring配置文件(配置文件xxxx.xml)! 1.Helloword实现 Helloword.java public class HelloWord { private ...

  9. C#读取信息备份

    class Program { static void Main(string[] args) { var wc = new WebClient(); var html = wc.DownloadSt ...

  10. Angular.js数据绑定时自动转义html标签及内容

    angularJS在进行数据绑定时默认是以字符串的形式数据,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止html标签的注入攻击,但有时候需要,特别是从数据库读取带格式的文本 ...