Вопрос по .net, razor, asp.net-mvc, c#, asp.net-mvc-3 – Загрузка изображения в ASP.NET MVC

40

У меня есть форма для загрузки, и я хочу передать свою информацию, такую как изображение, и некоторые другие поля, но я не знаю, как я могу загрузить изображение ...

это мой код контроллера:

<code>[HttpPost]
        public ActionResult Create(tblPortfolio tblportfolio)
        {
            if (ModelState.IsValid)
            {
                db.tblPortfolios.AddObject(tblportfolio);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(tblportfolio);
        }
</code>

И это мой вид кода:

<code>@model MyApp.Models.tblPortfolio

<h2>Create</h2>

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>tblPortfolio</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ImageFile)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.ImageFile, new { type = "file" })
            @Html.ValidationMessageFor(model => model.ImageFile)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Link)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Link)
            @Html.ValidationMessageFor(model => model.Link)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
</code>

Теперь я не знаю, как я могу загрузить изображение и сохранить его на сервере ... как я могу установить имя изображения с помощьюGuid.NewGuid(); ? Или как я могу установить путь к изображению?

Какой типmodel.ImageFile? Shimmy
@Shimmy: я просто сохраняю название изображения в базе данных. это строка. Persian.
зацени мой ответstackoverflow.com/a/40990080/4251431 Basheer AL-MOMANI
В итоге я создал GUID для каждого нового изображения и сохранил его имя в базе данных. Папка не сохраняется на сервере, только имя файла изображения. Папка внедряется динамически. Shimmy

Ваш Ответ

2   ответа
45

вам нужно изменить свое представление, включив в него следующее:

<input type="file" name="file" />

Затем вам нужно изменить свой постActionMethod взятьHttpPostedFileBase, вот так:

[HttpPost]
public ActionResult Create(tblPortfolio tblportfolio, HttpPostedFileBase file)
{
    //you can put your existing save code here
    if (file != null && file.ContentLength > 0) 
    {
        //do whatever you want with the file
    }
}
Хм, вам нужно узнать из пула приложений для веб-сайта, под каким удостоверением он работает (по умолчанию это удостоверение пула приложений) и предоставить ему правильные разрешения.
Хм, смотри здесьlearn.iis.net/page.aspx/624/application-pool-identities и убедитесь, что вы выполнили все эти шаги, которые должны работать нормально :)
Работает правильно .. Спасибо. Persian.
Я изменяю свою идентификацию пула приложений на Localsystem. Я где-то об этом говорил, что я должен сменить ее на localsystem, но она не работает ... Есть предложения? Persian.
Я использую ваш код и думаю, что он работает правильно, но он показывает мне ошибку: Доступ к пути & C; \ Users \ Администратор \ Desktop \ ND \ MyApp \ MyApp \ Uploads & apos; отказано. Ты знаешь почему ? почему он показывает мне эту ошибку на локальном? Persian.
3

Request с помощьюRequest.Files Коллекция, в случае загрузки одного файла, просто прочитайте из первого индекса, используяRequest.Files[0]:

[HttpPost]
public ActionResult Create(tblPortfolio tblportfolio) 
{
 if(Request.Files.Count > 0)
 {
 HttpPostedFileBase file = Request.Files[0];
 if (file != null) 
 { 
  // business logic here  
 }
 } 
}

В случае загрузки нескольких файлов, вы должны выполнитьRequest.Files коллекция:

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio)
{ 
 for(int i=0; i < Request.Files.Count; i++)
 {
   HttpPostedFileBase file = Request.Files[i];
   if (file != null)
   {
    // Do something here
   }
 }
}

Если вы хотите загрузить файл без обновления страницы через ajax, вы можете использоватьэта статья, которая использует плагин jquery

Похожие вопросы