c# - How to upload "one" image to a database with Enitity Framework and MVC 4 -
i trying write image upload service postcontroller
in create
action, getting compile error saying:
'system.array' not contain definition 'inputstream'/contentlength , no extension method 'inputstream'/contentlength accepting first argument of type 'system.array'
on these lines:
using (var binaryreader = new binaryreader(uploadimage.inputstream)) { imagedata = binaryreader.readbytes(uploadimage.contentlength); }
i want upload 1 file , no more. unsure if correct: singlepart/form-data
in html.begin
form.
i did try httppostedfilebase uploadimage
instead of httppostedfilebase[] uploadimage
got error of instance not set object
on line:
using (var binaryreader = new binaryreader(uploadimage.inputstream))
it should noted post.picture
(varbinary(max))
in post table.
view:
@using (html.beginform("create", "post", formmethod.post, new { enctype = "singlepart/form-data" })) { @html.antiforgerytoken() @html.validationsummary(true) <fieldset> <div class="col-xs-6 col-md-4"> @html.labelfor(model => model.picture) <div class="editor-field"> <input type="file" name="uploadimages" class="input-files" /> @html.validationmessagefor(model => model.picture) </div> </div>
controller:
[authorize] public actionresult create() { return view(); } [httppost] [validateantiforgerytoken] [authorize] public actionresult create([bind(include = "bloguseremail,categoryid,title,shortdescription,description")]post post, httppostedfilebase[] uploadimage, string selectedtags) { if (uploadimage != null) { return redirecttoaction("create"); } byte[] imagedata = null; using (var binaryreader = new binaryreader(uploadimage.inputstream)) // not set instance of object { imagedata = binaryreader.readbytes(uploadimage.contentlength); } var image = new post { picture = imagedata }; post.picture = image.picture;
you error because have array
of objects , try use contentlength
/inputstream
property of httppostedfilebase
instead of uploadimage.inputstream
can take first element if try tu upload 1 image uploadimage[0].inputstream
or uploadimage.first().inputstream
. or instead can remove []
.
also have change enctype
"singlepart/form-data"
"multipart/form-data"
the input have name uploadimages
, parameter of action uploadimage
, change input according
<input type="file" name="uploadimage" class="input-files" />
i recommend use model encapsulate form elements.
public class postcreatemodel : post { public httppostedfilebase uploadimage { get; set; } public string selecttags { get; set; } }
and action this. don't forget change @model
in view.
public actionresult create(postcreatemodel post) { if (post.uploadimage != null) { return redirecttoaction("create"); } byte[] imagedata = null; using (var binaryreader = new binaryreader(post.uploadimage.inputstream)) // not set instance of object { imagedata = binaryreader.readbytes(post.uploadimage.contentlength); } var image = new post { picture = imagedata }; post.picture = image.picture;
Comments
Post a Comment