如何上传图片,保存到数据库,创建缩略图并在视图中显示?
如何上传图片,保存到数据库,创建缩略图并在视图中显示?
how to upload image,save to Database,create thumbnail and display in view?
首先创建视图
First the Create View
@ Html.LabelFor(model => model.ImageData,new {@class =control-label col-md-
2})
@Html.LabelFor(model => model.ImageData, new { @class = "control-label col-md-
2" })
< input name =Imagetype =file/>
@ Html.ValidationMessageFor(model => model.ImageData)
<input name="Image" type="file" />
@Html.ValidationMessageFor(model => model.ImageData)
然后控制器创建动作
public ActionResult Create(ArtWork artwork,HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if(image!= null)
{
//附上保存到数据库之前将图像上传到对象
artwork.ImageMimeType = image.ContentLength;
artwork.ImageData = new byte [image.ContentLength];
image.InputStream.Read(artwork.ImageData,0,image.ContentLengt h);
//将图像保存到文件
var filename = image.FileName;
var filePathOriginal = Server.MapPath(/ Content / Uploads / Originals);
var filePathThumbnail = Server.MapPath(/ Content / Uploads / Thumbnails);
string savedFileName = Path.Combine(filePathOriginal,filename );
image.SaveAs(savedFileName);
//从文件中读取图像并从中创建缩略图
var imageFile =
Path.Combine(Server.MapPath(〜/ Content / Uploads / Originals),filename);
using(var srcImage = Image.FromFile(imageFile))
使用(var newImage = new Bitmap(100,100))
使用(var graphics = Graphics.FromImage(newImage))
using(var stream = new MemoryStream())
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
图形.DrawImage(srcImage,new Rectangle(0,0,100,100));
newImage.Save(stream,ImageFormat.Png);
var thumbNew = File( stream.ToArray(),image / png);
artwork.ArtworkThumbnail = thumbNew.FileContents;
}
}
//将模型对象保存到数据库
db.ArtWorks.Add(artwork);
db.SaveChanges();
返回RedirectToAction(索引);
}
返回查看(图稿);
}
public FileContentResult GetThumbnailImage(int artworkId)
{
ArtWork art = db.ArtWorks.FirstOrDefault(p => p.ArtWorkId == artworkId);
if(art!= null)
{
返回文件(art.ArtworkThumbnail,art.ImageMimeType .ToString());
}
else
{
返回null;
}
}
此处显示在视图中
< img src =@ Url.Action(getthumbnailimage =,artwork =,new {Model.ArtWorkId})> alt =艺术品图片/> < / img> |
Then the Controller Create Action
public ActionResult Create(ArtWork artwork, HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if (image != null)
{
//attach the uploaded image to the object before saving to Database
artwork.ImageMimeType = image.ContentLength;
artwork.ImageData = new byte[image.ContentLength];
image.InputStream.Read(artwork.ImageData, 0, image.ContentLength);
//Save image to file
var filename = image.FileName;
var filePathOriginal = Server.MapPath("/Content/Uploads/Originals");
var filePathThumbnail = Server.MapPath("/Content/Uploads/Thumbnails");
string savedFileName = Path.Combine(filePathOriginal, filename);
image.SaveAs(savedFileName);
//Read image back from file and create thumbnail from it
var imageFile =
Path.Combine(Server.MapPath("~/Content/Uploads/Originals"), filename);
using (var srcImage = Image.FromFile(imageFile))
using (var newImage = new Bitmap(100, 100))
using (var graphics = Graphics.FromImage(newImage))
using (var stream = new MemoryStream())
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(srcImage, new Rectangle(0, 0, 100, 100));
newImage.Save(stream, ImageFormat.Png);
var thumbNew = File(stream.ToArray(), "image/png");
artwork.ArtworkThumbnail = thumbNew.FileContents;
}
}
//Save model object to database
db.ArtWorks.Add(artwork);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(artwork);
}
public FileContentResult GetThumbnailImage(int artworkId)
{
ArtWork art = db.ArtWorks.FirstOrDefault(p => p.ArtWorkId == artworkId);
if (art != null)
{
return File(art.ArtworkThumbnail, art.ImageMimeType.ToString());
}
else
{
return null;
}
}
And here for the display in the view
<img src="@Url.Action(" getthumbnailimage=", " artwork=", new { Model.ArtWorkId })"> alt="Artwork Image" /> </img> |