Я пытаюсь по-разному сохранить тип изображения String в моей базе данных, но он всегда дает мне System.Web.HttpPostedFileWrapper. я не понимаю, что здесь не так
Я хочу создать новый продукт, содержащий заголовок, описание, изображение и их категорию. Когда я публикую данные через create, они сохраняют данные, но не отображают изображение, и когда я проверяю поле изображения базы данных, я нахожу значение изображения HttpPostedFileWrapper не p.png или product.jpg -
Это контроллер:
[HttpPost]
[ValidateAntiForgeryToken]
[Route("Create")]
public ActionResult Create([Bind(Include = "Ida,description,image,Userid,Idc,titre")] Article article,HttpPostedFileBase postedFile)
{
if (ModelState.IsValid)
{
if (postedFile != null)
{
var a =new byte[postedFile.ContentLength] ;
article.image = Convert.ToBase64String(a);
postedFile.InputStream.Read(a, 0, postedFile.ContentLength);
}
db = new IdentityDBEntities2();
// Add article to database
article.UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
article.Idc = Convert.ToInt32(Request["Idc"]);
db.Articles.Add(article);
ViewBag.Idcc = new SelectList(db.Categories, "Id", "libelle");
db.SaveChanges();
return RedirectToAction("Index");
}
return View(article);
}
привет, изображение - это изображение в базе данных, и я хочу отобразить изображение в папке ~/Content/img.
Если ваше «редактирование» является рабочим решением, переместите его в ответ ниже. Это помогает прояснить, какая часть текста является вопросом, а какая — самостоятельным ответом.
хорошо, брат, спасибо, что заметил это





Вы хотите просто скопировать файл? Почему бы не использовать:
System.IO.File.Copy("source", "destination");
http://msdn.microsoft.com/en-us/library/c6cfw35a.aspx
Да, я хочу просто получить значение файла, например product.png, и сохранить его в поле изображения в базе данных в виде строки.
Смотрите мой следующий комментарий
Пожалуйста, измените это, переместите строку чтения кода из потока вверх
if (postedFile != null)
{
var a = new byte[postedFile.ContentLength];
postedFile.InputStream.Read(a, 0, postedFile.ContentLength);
article.image = Convert.ToBase64String(a);
}
Обновлено:
Я попытался воспроизвести исходный код на своей стороне, это сработало.
Вы настроили new {enctype = "multipart/form-data"} для своей формы?
[HttpPost]
//[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Ida,description,image,Userid,Idc,titre")] Article article, HttpPostedFileBase postedFile)
{
if (ModelState.IsValid)
{
if (postedFile != null)
{
var a = new byte[postedFile.ContentLength];
postedFile.InputStream.Read(a, 0, postedFile.ContentLength);
article.image = Convert.ToBase64String(a);
//db = new IdentityDBEntities2();
//// Add article to database
//article.UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
//article.Idc = Convert.ToInt32(Request["Idc"]);
//db.Articles.Add(article);
//ViewBag.Idcc = new SelectList(db.Categories, "Id", "libelle");
//db.SaveChanges();
TempData["Image"] = article.image;
}
return RedirectToAction("Index");
}
return View(article);
}
Создать.cshtml-файл
@using(Html.BeginForm("Create","Feedback",FormMethod.Post,new {enctype = "multipart/form-data"}))
{
<input type = "file" name = "postedFile"/>
<input type = "submit" value = "Save"/>
}
Файл index.cshtml
@{
var imgSrc = string.Format("data:image/gif;base64,{0}", TempData["Image"]);
}
<img src = "@imgSrc"/>
Не работает брат, оставайся, сохраняй HttpPostedFileWrapper в поле изображения
Можете ли вы изменить изображение статьи на byte[] и удалить Convert.ToBase64String?
Когда я меняю изображение на байт, я скрываю входной файл для загружаемого файла, это мой ввод бритвы @Html.EditorFor(model => model.image, new { htmlAttributes = new { @class = "form-control", @type = "file" ,@name= "postedFile" ,@id= "postedFile" } })
Ваш параметр опубликованный файл относится к типу HttpPostedFileBase. Вы должны сохранить полное имя файла на клиенте, а не сохранять этот параметр напрямую. Попробуй это:
article.image = postedFile.FileName;
я уже делал это раньше и пытался сохранить как файл, но не работает братан
Можете ли вы объяснить конкретно, что вы хотите сделать?
Хорошо, брат, я хочу создать новый Product, содержащий заголовок, описание, изображение и их категорию, когда я публикую данные через создание, это сохраняет данные, но не отображает изображение, и когда я проверяю поле изображения базы данных, я нахожу значение изображения HttpPostedFileWrapper не p.png или продукт .jpg
Вы хотите сохранить файл в базе данных как "имя файла.расширение файла". Если да, не могли бы вы попробовать код выше?
да, я пытаюсь, но это не работает, брат, можешь отредактировать ответ с помощью моего кода, спасибо, брат
Если да, то то, что вы хотите сделать, отличается. Потому что код, который я написал выше, — это код, который работает в моем проекте. Если вы хотите сделать что-то отличное от того, что я объяснил выше, пожалуйста, поделитесь дополнительной информацией.
Не работает брат пожалуйста, вы можете связаться со мной на моем facebook ?? Я покажу вам все детали Бадра Сена. Электронная почта: [email protected]. Спасибо
Просто обновление. Я использовал varbinary в конце. Я добавил изображение в базу данных, используя
if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png")
{
Stream stream = postedFile.InputStream;
BinaryReader reader = new BinaryReader(stream);
byte[] imgByte = reader.ReadBytes((int)stream.Length);
con = new SqlConnection("MyConnectionString");
SqlCommand cmd = new SqlCommand("insert into Events (AspNetUsersId,EvtName,EvtType,EvtDescription,EvtDate,EvtVote, EvtImage) values (@AspNetUsersId, @EvtName, @EvtType, @EvtDescription, @EvtDate, @EvtVote, @EvtImage)", con);
cmd.Parameters.AddWithValue("@AspNetUsersId", userId);
cmd.Parameters.AddWithValue("@EvtName", eventName.Text);
cmd.Parameters.AddWithValue("@EvtType", eventType.Text);
cmd.Parameters.AddWithValue("@EvtDescription", eventDescription.Text);
cmd.Parameters.AddWithValue("@EvtDate", datetimepicker.Value);
cmd.Parameters.AddWithValue("@EvtVote", 0);
cmd.Parameters.Add("@EvtImage", SqlDbType.VarBinary).Value = imgByte;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
И отобразил его в теге изображения, используя
byte[] imgByte = null;
con = new SqlConnection("MyConnectionString");
SqlCommand cmd = new SqlCommand("SELECT * FROM Events", con);
con.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
imgByte = (byte[])(dr["EvtImage"]);
string str = Convert.ToBase64String(imgByte);
imageTest.Src = "data:Image/png;base64," + str;
}
Интерфейсный код:
<img runat = "server" id = "imageTest" src = "imageIDtagName" />
Спасибо всем за помощь!
пожалуйста, попробуйте немного уточнить вашу проблему. Что такое «картинка»? Что именно ты пытаешься сделать? Также обратите внимание, что article.image всегда является либо пустым массивом байтов, преобразованным в строку, либо значением по умолчанию.