.net传图片到MySQL_【读书笔记】Asp.Net MVC 上传图片到数据库(会的绕行)

本文介绍了在ASP.NET MVC框架下如何将图片直接上传到数据库,而不是传统地存储为服务器文件并保存URL。这种方法对于IE6浏览器特别适用,因为它避免了自动提交form的问题。文章详细阐述了模型定义、编辑方法以及如何从数据库中检索图片内容,并展示了如何使用HttpPostedFileBase对象读取文件并将其转换为二进制数据存储在数据库中。
摘要由CSDN通过智能技术生成

之前上传图片的做法都是上传到服务器上的文件夹中,再将url保存到数据库。其实在MVC中将图片上传到数据库很便捷的事情,而且不用去存url了。而且这种方式支持ie6(ie6不支持jquery自动提交form,认为其不安全,这里form是主动点击提交的,所以就没有这个问题,而uploadify自动提交是flash的方式)。

一、建立模型

场景是假设我们需要给一个Product编辑一张图片。在模型中,先定义好两个属性,ImageData和ImageType

public classProduct {

[HiddenInput(DisplayValue=false)]public int ProductID { get; set; }

[Required(ErrorMessage= "Please enter a product name")]public string Name { get; set; }

[Required(ErrorMessage= "Please enter a description")]

[DataType(DataType.MultilineText)]// 在前台会渲染成Textareapublic string Description { get; set; }

[Required]

[Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")]public decimal Price { get; set; }

[Required(ErrorMessage= "Please specify a category")]public string Category { get; set; }public byte[] ImageData { get; set; }

[HiddenInput(DisplayValue= false)]//会让改属性在编辑的时候不显示出来。public string ImageType{ get; set; }

}

二、存取方法

那在我们的控制器中,这样定义Edit方法。MVC强大的模型绑定机制会自动的将前台form中的数据根据name转换成我们需要的C#对象。当然后台代码这里只是简单的实现,文件大小和类型的判断先略过。

[HttpPost] //保存publicActionResult Edit(Product product, HttpPostedFileBase image) {if(ModelState.IsValid) {if (image != null) {

product.ImageType=image.ContentType;//获取图片类型

product.ImageData= new byte[image.ContentLength];//新建一个长度等于图片大小的二进制地址

image.InputStream.Read(product.ImageData,0, image.ContentLength);//将image读取到ImageData中

}//save the product

repository.UpdateProduct(product);//更新一下 保存模型。//add a message to the viewbag

TempData["message"] = string.Format("{0} has been saved", product.Name);//return the user to the list

return RedirectToAction("Index");

}else{//there is something wrong with the data values

returnView(product);

}

}

HttpPostedFileBase.inputStream 获取一个Stream对象,该对象指向一个上载文件,以准备读取该文件的内容。

9bb06ab19e026bcb12fb2fe6e3a455eb.png

然后通过ID,将二进制转化为图片。

public FileContentResult GetImage(intproductId) {

Product prod= repository.Products.FirstOrDefault(p => p.ProductID ==productId);if (prod != null) {returnFile(prod.ImageData, prod.ImageMimeType);//File方法直接将二进制转化为指定类型了。

}else{return null;

}

}

FileContentResult 最适合将二进制数据转换成文件,同类型还有FileStreamResult,FilePathResult,这三个都是继承与FileResult。

e6ce029a7f8ae732db105e5ccf3b6cad.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值