asp.net - HttpPostedFileBase 在数据库中保存图像的问题
问题描述
我正在尝试从我的数据库中检索图像字节。我首先使用实体框架代码。我传入 Httppost 方法 2 个参数,一个是模型视图,第二个是 HttpPostedFileBase 作为列表。当我调试该方法时,我可以看到列表中有文件,它们也有 ContentLength 123233。然后我将其转换为字节以便存储在数据库中。
但是,当我将其存储到数据库中时,文件名和相关的职位 ID 被正确插入,但图像的字节为 0x00000...无限 0。
当我将它们解析到视图中时,我没有图像。为什么我的代码不保存字节而只保存 00000 ...?
这是我的代码。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(PostJobViewModel JobModel, List<HttpPostedFileBase> jobImages)
{
if (User.Identity.Name == "")
{
return RedirectToAction("Login","Account");
}
else
{
var uId = (from u in _context.Users where u.Email == User.Identity.Name select u.Id).First();
var isNull = true;
var tmpIsNull = true;
foreach (var item in jobImages)
{
if (item == null)
{
isNull = true;
}
else
{
isNull = false;
tmpIsNull = isNull;
}
}
ApplicationUser userObj = _context.Users.Single(u => u.Id == uId);
if (isNull && tmpIsNull == true)
{
if (ModelState.IsValid)
{
var newJob = new JobPost
{
Category = JobModel.Category,
JobAddress = JobModel.JobAddress,
AboutJob = JobModel.AboutJob,
JobCity = JobModel.JobCity,
JobPostCode = JobModel.JobPostCode,
Headline = JobModel.Headline,
dateJobPosted=DateTime.Now,
UserId = uId,
User= userObj,
JobService = JobModel.JobService
};
_context.jobPosts.Add(newJob);
_context.SaveChanges();
}
}
else
{
if (ModelState.IsValid)
{
var newJob = new JobPost {
Category = JobModel.Category,
JobAddress = JobModel.JobAddress,
AboutJob = JobModel.AboutJob,
JobCity = JobModel.JobCity,
JobPostCode = JobModel.JobPostCode,
dateJobPosted = DateTime.Now,
UserId = uId,
Headline = JobModel.Headline,
User = userObj,
JobService=JobModel.JobService
};
_context.jobPosts.Add(newJob);
_context.SaveChanges();
// Retrieve job post to add the images to the post
JobPost post = _context.jobPosts.Single(j => j.JobPostId == newJob.JobPostId);
foreach (var item in jobImages)
{
if (item!=null)
{
JobImage img = new JobImage
{
JobFileName=item.FileName,
JobImageContentBytes= new byte[item.ContentLength],
JobPost = post
};
_context.jobImages.Add(img);
}
}
_context.SaveChanges();
}
else
{
return View(JobModel);
}
}
}
var whatWorkToBeDone = new SelectList(_context.JobWizardCategories, "WhatToDoneId", "WhatToDoneItem");
ViewBag.whatWorkToBeDone = whatWorkToBeDone;
return View();
}
该模型
public class PostJobViewModel
{
[Required]
public WorkCategory Category { get; set; }
[Required]
public string Headline { get; set; }
[Required]
public string JobAddress { get; set; }
[Required]
public string AboutJob { get; set; }
[Required]
public string JobCity { get; set; }
[Required]
public string JobPostCode { get; set; }
public ServiceCategory JobService { get; set; }
}
看法
@model FinalWorkFinder.Models.ManageAccountCombinedViewModel
@{
ViewBag.Title = "Dashboard";
}
<section class="my-posted-jobs">
<h1 class="my-posted-jobs-title">@ViewBag.myJobsTitle</h1>
<div class="border-job"></div>
<ul class="my-jobs-section">
@foreach (var item in Model.MyPostedJobsViewModel)
{
<li class="separate-job">
<div class="content-li">
<h2 class="content-li-headline">@item.Headline</h2>
<div class="pictures-li">
@{
foreach (var pic in item.JobPictures)
{
//base 64 img to screen
if (pic != null)
{
var base64 =
Convert.ToBase64String(pic.JobImageContentBytes);
var img =
string.Format("data:image/jpg;base64,{0}", base64);
<img class="posted-pic" src="@img" alt=""
/>
}
}
}
</div>
<div class="job-date-li">@item.PostedDate</div>
</div>
</li>
}
</ul>
</section>
模型。
public class ManageAccountCombinedViewModel
{
public List<MyPostedJobsViewModel> MyPostedJobsViewModel { get; set; }
}
模型
public class MyPostedJobsViewModel
{
public string Headline { get; set; }
public DateTime PostedDate { get; set; }
public List<JobPicturesViewModel> JobPictures { get; set; }
}
模型
public class JobPicturesViewModel
{
public byte[] JobImageContentBytes { get; set; }
}
解决方案
您没有将文件内容读取到byte[]
,将读取内容的代码更改为此
foreach (var item in jobImages)
{
if (item!=null)
{
byte[] uploadedFile = new byte[item.InputStream.Length];
item.InputStream.Read(uploadedFile, 0, uploadedFile.Length);
JobImage img = new JobImage
{
JobFileName=item.FileName,
JobImageContentBytes= uploadedFile,
JobPost = post
};
_context.jobImages.Add(img);
}
}
推荐阅读
- swift - Google Maps iOS 不允许自定义地图标记图像
- c# - Quaternion.Slerp 在 X 和 Z 轴上没有 Y 轴
- python - Scrapy如何保存爬取状态?
- python - Flask Custom Role Wrapper 给出“AssertionError:视图函数映射正在覆盖现有端点函数:运行”
- swift4 - 无法访问 Alamofire 请求正文
- airflow - 气流工作人员卡住:任务处于“运行”状态,这不是执行的有效状态。必须清除任务才能运行
- python - 当我尝试删除帖子时,不断收到“IntegrityError FOREIGN KEY constraint failed”
- python - 映射两个数据帧并使用字典执行求和运算
- git - IntelliJ IDEA 如何在不使用 .gitignore 文件的情况下自动检测并忽略 Git 存储库中的目标目录?
- python - 提示遇到意外错误时如何恢复 conda 更新