MVC 4를 처음 사용하고 있으며 웹 사이트에서 파일 업로드 컨트롤을 구현하려고합니다. 실수를 찾을 수 없습니다. 파일에 null 값이 있습니다.
제어 장치:
public class UploadController : BaseController
{
public ActionResult UploadDocument()
{
return View();
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
return RedirectToAction("UploadDocument");
}
}
전망:
@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="FileUpload" />
<input type="submit" name="Submit" id="Submit" value="Upload" />
}
답변
Upload
메소드의 HttpPostedFileBase
매개 변수는 상기와 같은 이름을 가지고 있어야합니다file input
.
입력을 다음과 같이 변경하십시오.
<input type="file" name="file" />
또한 파일은 Request.Files
다음 에서 찾을 수 있습니다 .
[HttpPost]
public ActionResult Upload()
{
if (Request.Files.Count > 0)
{
var file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
}
return RedirectToAction("UploadDocument");
}
답변
그것을 명확히. 모델:
public class ContactUsModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public HttpPostedFileBase attachment { get; set; }
조치 후
public virtual ActionResult ContactUs(ContactUsModel Model)
{
if (Model.attachment.HasFile())
{
//save the file
//Send it as an attachment
Attachment messageAttachment = new Attachment(Model.attachment.InputStream, Model.attachment.FileName);
}
}
마지막으로 hasFile을 확인하기위한 확장 메소드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace AtlanticCMS.Web.Common
{
public static class ExtensionMethods
{
public static bool HasFile(this HttpPostedFileBase file)
{
return file != null && file.ContentLength > 0;
}
}
}
답변
페이지보기
@using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" }))
{
<input type="file" name="file" />
<input type="submit" value="Upload" class="save" id="btnid" />
}
스크립트 파일
$(document).on("click", "#btnid", function (event) {
event.preventDefault();
var fileOptions = {
success: res,
dataType: "json"
}
$("#formid").ajaxSubmit(fileOptions);
});
컨트롤러에서
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file)
{
}
답변
매개 변수에 동일한 이름이 필요하고 입력 필드 이름 이이 줄을 바꾸기 때문에 입력 된 입력 이름을 변경해야합니다. 코드가 제대로 작동합니다.
<input type="file" name="file" />
답변
더 나은 방법은 HttpPostedFileBase를 사용하는 것입니다. 컨트롤러 또는 API에서 를 . 그런 다음 크기, 유형 등을 간단하게 감지 할 수 있습니다.
여기에서 찾을 수있는 파일 속성 :
MVC3 HttpPostedFileBase가 이미지인지 확인하는 방법
예를 들어 ImageApi :
[HttpPost]
[Route("api/image")]
public ActionResult Index(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
try
{
string path = Path.Combine(Server.MapPath("~/Images"),
Path.GetFileName(file.FileName));
file.SaveAs(path);
ViewBag.Message = "Your message for success";
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" + ex.Message.ToString();
}
else
{
ViewBag.Message = "Please select file";
}
return View();
}
도움이 되길 바랍니다.