Как сохранить размещенное изображение в asp.net?

Я пытаюсь по-разному сохранить тип изображения 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);
}

пожалуйста, попробуйте немного уточнить вашу проблему. Что такое «картинка»? Что именно ты пытаешься сделать? Также обратите внимание, что article.image всегда является либо пустым массивом байтов, преобразованным в строку, либо значением по умолчанию.

DevilSuichiro 07.03.2019 11:47

привет, изображение - это изображение в базе данных, и я хочу отобразить изображение в папке ~/Content/img.

mor 07.03.2019 12:35

Если ваше «редактирование» является рабочим решением, переместите его в ответ ниже. Это помогает прояснить, какая часть текста является вопросом, а какая — самостоятельным ответом.

halfer 09.03.2019 18:27

хорошо, брат, спасибо, что заметил это

mor 11.03.2019 15:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
99
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы хотите просто скопировать файл? Почему бы не использовать:

System.IO.File.Copy("source", "destination");

http://msdn.microsoft.com/en-us/library/c6cfw35a.aspx

Да, я хочу просто получить значение файла, например product.png, и сохранить его в поле изображения в базе данных в виде строки.

mor 07.03.2019 11:54

Смотрите мой следующий комментарий

Rokonz Zaz 07.03.2019 15:13

Пожалуйста, измените это, переместите строку чтения кода из потока вверх

 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 в поле изображения

mor 07.03.2019 11:53

Можете ли вы изменить изображение статьи на byte[] и удалить Convert.ToBase64String?

Hien Nguyen 07.03.2019 11:57

Когда я меняю изображение на байт, я скрываю входной файл для загружаемого файла, это мой ввод бритвы @Html.EditorFor(model => model.image, new { htmlAttributes = new { @class = "form-control", @type = "file" ,@name= "postedFile" ,@id= "postedFile" } })

mor 07.03.2019 12:11
Ответ принят как подходящий

Ваш параметр опубликованный файл относится к типу HttpPostedFileBase. Вы должны сохранить полное имя файла на клиенте, а не сохранять этот параметр напрямую. Попробуй это:

article.image = postedFile.FileName;

я уже делал это раньше и пытался сохранить как файл, но не работает братан

mor 07.03.2019 12:20

Можете ли вы объяснить конкретно, что вы хотите сделать?

A.G. 07.03.2019 12:26

Хорошо, брат, я хочу создать новый Product, содержащий заголовок, описание, изображение и их категорию, когда я публикую данные через создание, это сохраняет данные, но не отображает изображение, и когда я проверяю поле изображения базы данных, я нахожу значение изображения HttpPostedFileWrapper не p.png или продукт .jpg

mor 07.03.2019 12:30

Вы хотите сохранить файл в базе данных как "имя файла.расширение файла". Если да, не могли бы вы попробовать код выше?

A.G. 07.03.2019 12:44

да, я пытаюсь, но это не работает, брат, можешь отредактировать ответ с помощью моего кода, спасибо, брат

mor 07.03.2019 12:48

Если да, то то, что вы хотите сделать, отличается. Потому что код, который я написал выше, — это код, который работает в моем проекте. Если вы хотите сделать что-то отличное от того, что я объяснил выше, пожалуйста, поделитесь дополнительной информацией.

A.G. 07.03.2019 12:56
docs.microsoft.com/tr-tr/dotnet/api/… И взгляните на это.
A.G. 07.03.2019 12:56

Не работает брат пожалуйста, вы можете связаться со мной на моем facebook ?? Я покажу вам все детали Бадра Сена. Электронная почта: [email protected]. Спасибо

mor 07.03.2019 13:41

Просто обновление. Я использовал 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" />

Спасибо всем за помощь!

Другие вопросы по теме