3

我的表格中有一张图片上传:

    @using (Html.BeginForm("Create", "Application", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Application Under Testing</legend>

        <div class="editor-label">
            Image
        </div>
        <div class="editor-field">
            @if (Model.AppDetails.Image == null)
            {
                @:None
            } else {
                <img width="400" src="@Url.Action("GetImage", "Application", new { Model.AppDetails.ID })" />   
            }
            <div>Upload new image: <input type="file" name="Image" /></div>
        </div>
     </fieldset>
     }

这将提交它,并使用以下方法将其保存到数据库中:

    [HttpPost]
    public ActionResult Create(ApplicationViewModel vm, HttpPostedFileBase image)
    {
        if (ModelState.IsValid)
        {
            if (image != null)
            {
                vm.AppDetails.ImageMimeType = image.ContentType;
                vm.AppDetails.Image = new byte[image.ContentLength];
                image.InputStream.Read(vm.AppDetails.Image, 0, image.ContentLength);
            }

            _repository.SaveEntity<AUT>(vm.AppDetails);

            return RedirectToAction("Index");
        }

        return View(vm);
    }

所以,现在我有一个操作可以从数据库中获取图像以进行显示:

    public FileContentResult GetImage(Guid appID)
    {
        var app = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(appID));
        if (app == null)
        {
            return null;
        }

        return File(app.Image, app.ImageMimeType);
    }

在我看来,我有这段代码来显示图像:

    <td>
        @if (item.Image == null)
        {
            @:None
        } else {
            <img width="100" src="@Url.Action("GetImage", "Application", new { item.ID })" />   
        }
    </td>

网页上的输出是这样的:

<img width="100" src="/Validation/Application/GetImage/bd3fdb5b-8d73-48e2-a04e-1a49a73729be">

这不显示图像。编辑:我实际上检查了 Chrome 上的元素,它有 2 个错误(每个图像 1 个)说明:错误 500 内部服务器错误。它显示了getimage的url,是否值得使用完全限定的url?或者其他的东西?

所以我的猜测是,它要么没有在数据库中保存正确的数据,要么没有将数据正确读取为图像格式。或者我的代码在某个地方是错误的。

有什么想法吗?

- - 编辑 - -

我已经对此进行了单元测试,以查看是否可以检索图像。测试回来通过了。

因此,它必须与在客户端渲染它有关,因为服务器端似乎运行良好。Chrome 显示错误为:500 Internal Server Error。

4

2 回答 2

0

您是否验证过该文件实际上正在出现?我最近遇到了类似的情况,最终使用Request.Files它来访问发布的文件。

于 2013-03-18T12:47:32.953 回答
0

所以,我找到了这个问题的答案,并停止了对服务器的回调:

<img width="100" src="data:@item.ImageMimeType;base64,@(Convert.ToBase64String(item.Image))" />

使用它是否有任何问题,例如与旧浏览器的向后兼容性?还是有任何其他原因我不应该使用它?

这种方式意味着我不必再次查询数据库以获取图像。

于 2013-03-18T13:32:31.567 回答