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>

Web ページの出力は次のとおりです。

<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

だから、私はこの問題に対する答えを見つけ、サーバーへのコールバックを停止しました:

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

古いブラウザとの下位互換性など、これを使用する上で問題はありますか? それとも、これを使用してはいけない理由が他にありますか?

この方法は、画像についてデータベースに再度クエリを実行する必要がないことを意味します。

于 2013-03-18T13:32:31.567 に答える
0

ファイルが実際に届いていることを確認しましたか? 私は最近同様の状況Request.Filesにあり、投稿されたファイルにアクセスするために使用することになりました。

于 2013-03-18T12:47:32.953 に答える