Image preview with Fileupload asp.net mvc and JQuery
I am trying to view an image that a user is trying to upload. This is the code I am using. This works well in all major browsers, but I'm wondering if there is a better way to achieve this without using a session (although I'm clearing the session)? I don't want to use Flash.
@using (Html.BeginForm("UploadImage", "Home", FormMethod.Post, new { id = "fileuploadform", @enctype = "multipart/form-data" }))
{
<input id="fileupload" type="file" onchange="ChangeImage()" name="files" multiple>
<div id="preview">
<img src="#" id="imgThumbnail" alt="preview" />
</div>
}
<script>
$(function ChangeImage() {
$('#fileuploadform').fileupload({
done: function (e, data) {
var d = new Date();
$('#imgThumbnail')[0].src = "/Home/ImageLoad?a=" + d.getTime();
}
});
});
</script>
[HttpPost]
public ActionResult UploadImage(IEnumerable<HttpPostedFileBase> files, PostViewModel model)
{
Session["ContentLength"] = Request.Files[0].ContentLength;
Session["ContentType"] = Request.Files[0].ContentType;
byte[] b = new byte[Request.Files[0].ContentLength];
Request.Files[0].InputStream.Read(b, 0, Request.Files[0].ContentLength);
Session["ContentStream"] = b;
return Content(Request.Files[0].ContentType + ";" + Request.Files[0].ContentLength);
}
public ActionResult ImageLoad(int? id)
{
byte[] b = (byte[])Session["ContentStream"];
int length = (int)Session["ContentLength"];
string type = (string)Session["ContentType"];
Session["ContentLength"] = null;
Session["ContentType"] = null;
Session["ContentStream"] = null;
return File(b, type);
}
+3
source to share
3 answers
You can improve the action code like this:
HttpPostedFileBase picFile = Request.Files["fileUpload"];
if (picFile != null && picFile.ContentLength > 0)
{
byte[] pic = new byte[picFile.ContentLength];
picFile.InputStream.Read(pic, 0, picFile.ContentLength);
// you can use pic ....
}
+1
source to share
Image preview with Fileupload Asp.Net C # MVC with Razor Framework and jQuery?
This will allow multiple files to be viewed simultaneously as thumbnails.
On View Asp.Net C # MVC with Razor Framework
<div class="form-group">
@Html.LabelFor(model => model.ImageMedias)
<div class="input-group">
<div class="custom-file">
@Html.TextBoxFor(model => model.ImageMedias, "", new { @class = "custom-file-input", @type = "file", @multiple = "multiple", @accept = ".jfif,.jpg,.jpeg,.png,.gif" })
<label class="custom-file-label" for="InputFile">Choose file</label>
</div>
</div>
@Html.ValidationMessageFor(model => model.ImageMedias)
<div id="divImageMediaPreview">
</div>
</div>
Script
Script$("#ImageMedias").change(function () {
if (typeof (FileReader) != "undefined") {
var dvPreview = $("#divImageMediaPreview");
dvPreview.html("");
$($(this)[0].files).each(function () {
var file = $(this);
var reader = new FileReader();
reader.onload = function (e) {
var img = $("<img />");
img.attr("style", "width: 150px; height:100px; padding: 10px");
img.attr("src", e.target.result);
dvPreview.append(img);
}
reader.readAsDataURL(file[0]);
});
} else {
alert("This browser does not support HTML5 FileReader.");
}
});
I hope this helps.
0
source to share