如何上传图片,保存到数据库,创建缩略图并在视图中显示?

问题描述:

如何上传图片,保存到数据库,创建缩略图并在视图中显示?

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>