模型与图像-如何上传/显示
本文关键字:显示 图像 模型 | 更新日期: 2023-09-27 18:16:09
最近我开始学习ASP。. NET MVC 4和我正在努力如何将图像/位图对象添加到我所拥有的模型中,并让用户从桌面上选择图像进行上传,这样我就可以将其保存到我的数据库中以便稍后在我的网站上显示。
在我的培训网站,我做一个吉他销售网站,我有一个型号,上面有Id、名称、品牌和价格。所有我所做的是创建一个索引页,以显示所有的GutiarDataContext从数据库和创建页面,但我想为创建选择一个图像,并将其保存到数据库,当然,在索引视图中显示它。
我已经在网上和这里找到了一些答案,但我真的不明白他们想要解释的是什么,所以如果有人能给我一个例子和解释它是如何工作的,那就太棒了!
谢谢:)
用于在数据库中存储图像:
在Asp。. Net MVC,我们必须使用HttpPostedFileBase
上传文件,如下所示:-
控制器:
[HttpPost]
public ActionResult Upload(UploadViewModel model, HttpPostedFileBase file)
{
if (file != null)
{
int byteCount = file.ContentLength; <---Your file Size or Length
.............
.............
}
}
视图:
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<input type="submit" value="OK" />
}
显示数据库中的图像(这里举一个假设的例子)
<img height="80" width="140" class="imgThumb" src="@Url.Action("LoadImg", "Image", new { id = m.ImgId })" alt="Loading..." />
public ActionResult LoadImg(int id)
{
byte[] image = null;
tblImage img = en.tblImages.FirstOrDefault(i => i.ImgId == id);
image = (byte[])img.ImgSrc;
return File(image, "image/png");
}
控制器代码
public static byte[] GetImageFromUpload()
{
HttpPostedFileBase postedFile = null;
if (HttpContext.Current.Request != null && HttpContext.Current.Request.Files.Count > 0)
postedFile = new HttpPostedFileWrapper(HttpContext.Current.Request.Files["imageUpload"]);
if (postedFile == null || postedFile.FileName == string.Empty) return null;
using (Image img = Image.FromStream(postedFile.InputStream))
{
var file = new byte[postedFile.InputStream.Length];
var reader = new BinaryReader(postedFile.InputStream);
postedFile.InputStream.Seek(0, SeekOrigin.Begin);
file = reader.ReadBytes((int)postedFile.InputStream.Length);
return file;
}
}
loaddemployeeimagetoobject ()方法可用于将图像添加到字节数组中,并使用会话
将其解析到服务器 public static void LoadEmployeeImageToObject(byte[] photo , int employeeId)
{
if (HttpContext.Current.Request != null)
{
byte[] uploadedImageFromFileControl = GetImageFromUpload();
bool removeImage = HttpContext.Current.Request["removeImage"] == "on";
if (HttpContext.Current.Session["AjaxPhoto"] != null)
{
photo = (byte[])HttpContext.Current.Session["AjaxPhoto"];
}
else if (uploadedImageFromFileControl != null) photo = uploadedImageFromFileControl;
else if (employeeId != 0) //load image from db
{
photo = photo;
}
}
}
如果你正在使用这段代码,不需要创建数据库列保存数据库上的图像。只需为保存图片id添加一列。使用下面的jS脚本,您可以将图像保存在服务器文件系统上。(文件路径)
function uploadFile() {
var fd = new FormData();
fd.append("imageUpload", document.getElementById('imageUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "/HumanResource/Employee/AjaxImageUpload");//controller path
xhr.responseType = 'blob';
xhr.send(fd);
$('#divUploadStatus').show();
}
这个JS方法可以绑定到你的局部视图。像这样的html文件
<div id="divUploadPanel">
<label>
Upload New Image:</label>
<input type="file" id="imageUpload" name="imageUpload" onchange=" uploadFile(); " /><br />
这是父html文件
的代码 <div class="control-group">
<label class="control-label" >Photo</label>
<div class="controls">
@Html.Partial("_EditorImagePanel", Model)
</div>
</div>
希望这对你有帮助。谢谢:)