MVC 3图片未加载

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上检查了元素,它有两个错误(每个图像一个),声明:错误500内部服务器错误。并且它显示了getimage的url,是否值得使用完全限定的url?还是什么?我的猜测是,它要么没有将正确的数据保存在数据库中,要么没有将数据正确读入图像格式。或者我的代码有问题。有什么想法吗?---编辑--- 我已经对此进行了单元测试,以查看是否可以检索图像。测试通过了。所以,这一定是与客户端渲染有关,因为服务器端似乎运行良好。Chrome显示的错误是:500内部服务器错误。

你调试过你的代码了吗?GetImage方法中发生了什么?它能找到图片吗? - nemesv
那就是问题所在,我已经尝试在获取图像时设置断点,但它没有被触发... - Callum Linington
这可能会有所帮助:https://dev59.com/2Goy5IYBdhLWcg3wkOsK - Vimal Stan
你试过浏览生成的相对路径吗? - Brian P
是的,无法显示。我使用了Chrome的“检查元素”功能,但据我所知,它应该显示操作URL,而图像只需呈现数据。唯一的问题是我无法调试操作... - Callum Linington
2个回答

0

你确定文件已经被正确传输了吗?最近我也遇到了类似的情况,最终使用了Request.Files来获取已发布的文件。


你可以详细说明一下吗?你是如何使用 Request 的? - Callum Linington
是的,图像确实传输到服务器上了。而且这些图像在数据库中以非常大的长十六进制数字形式存在。 - Callum Linington
如果图像已经到达服务器,那么这就不是你的问题了。 - Brian P
你是如何向用户展示这张图片的? - Callum Linington

0

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

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

使用这个会有任何问题吗,比如与旧浏览器的向后兼容性?或者是否有其他原因,我不应该使用它?

这种方式意味着我不必再为图像查询数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接