0

我已经搜索了一段时间,现在没有任何乐趣。我试图将图像作为字节数组保存到我的 SQL 数据库中,然后我试图稍后显示它。显示部分不工作。不知道是存档的问题还是显示的问题。保存似乎工作正常,我可以在我的 SQL 表中看到“二进制数据”。有什么建议么?

发生的事情是我的页面上有一个损坏的图像图标。即使我手动转到 URL 例如 .../Treatments/LoadImage/14 它也坏了。

模型在我的表定义中包含这个:

public byte[] Photo { get; set; }

创建视图:

<div class="editor-label">
    @Html.LabelFor(model => model.Photo)
</div>
<div class="editor-field">
    <input type="file" name="photo" />
</div>

创建控制器:

    [HttpPost]
    public ActionResult Create([Bind(Exclude = "Photo")]Treatment treatment)
    {
        if (ModelState.IsValid)
        {
            treatment.Photo = GetByteArrayFromFile();
            treatment.WebOrder = db.Treatments.Count();
            db.Treatments.Add(treatment);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.TreatmentTypeId = new SelectList(db.TreatmentTypes, "Id", "Name", treatment.TreatmentTypeId);
        return View(treatment);
    }

    private byte[] GetByteArrayFromFile() {
        int fileLength = Request.Files["photo"].ContentLength;
        byte[] byteArray = new byte[fileLength];

        return byteArray;
    }

显示视图:

    <div class="display-label">
            @Html.DisplayNameFor(model => model.Photo)
    </div>
    <div class="display-field">
        <img src="@Url.Action("LoadImage", new { Id = Model.Id })" />
    </div>

加载图像控制器:

    public ActionResult LoadImage(int Id) {
        byte[] bytes = db.Treatments.Find(Id).Photo;
        return File(bytes, "image/jpeg");
    }

我已经添加了:

@using (Html.BeginForm("Create", "Treatments", FormMethod.Post, new { enctype = "multipart/form-data" })) {
    // View Code Omitted
}

到我的创建视图。

我的代码有什么基本错误吗?有什么建议么?谢谢。

4

1 回答 1

0

这是我的 GetByteArrayFromFile 方法的问题。我上面的原始方法仅返回一个零数组。使用它,我解决了我的问题:

        private byte[] GetByteArrayFromFile() {
            WebImage image = WebImage.GetImageFromRequest();
            byte[] byteArray = image.GetBytes();

            return byteArray;
        }
于 2013-04-28T19:58:58.450 回答