我有一个奇怪的问题。
我想将上传的图像保存到项目中的文件夹中。
这是来自控制器的代码:
......
if (Request.Form["InputFile"] != null)
{
string directory = Server.MapPath("~/Content/UploadedFiles/");
var file = Request.Form["InputFile"];
string filename = fileService.GetFileName(directory, Request.Form["InputFile"]);
Request.Files[0]?.SaveAs(filename);
}
当调试器到达此行时:
Request.Files[0]?.SaveAs(filename);
应用程序会为Object reference not set
引发Request.Files
错误。
在视图中,我已添加
@using (Html.BeginForm(new { enctype = "multipart/form-data", id = "form" }))
以下是视图中的代码:
<div class="form-group" style="margin-bottom: 0px;">
<div class="col-md-8">
@Html.TextBox("uploadFile", "", new { @class = "form-control", @required = "required" , @onChange= "readURL(this);" })
</div>
<div class="col-md-3">
<div class="fileUpload btn btn-success form-control">
<span>Browse</span>
@Html.TextBox("InputFile", "", new { type = "file", @class = "upload", @id = "uploadBtn" })
</div>
</div>
</div>
模型中的InputFile:
public HttpPostedFileBase InputFile { get; set; }
您能否建议将所选图像保存到文件夹的尝试方法?
答案 0 :(得分:1)
您正在使用BeginForm()
的重载来添加路由值,而不是html属性。如果检查生成的html,则会看到<form>
元素不包含enctype = "multipart/form-data"
属性。
将代码更改为(替换您的控制器和动作名称)
@using (Html.BeginForm(actionName, controllerName, FormMethod.Post, new { enctype = "multipart/form-data", id = "form" }))
此外,您的模型包含一个HttpPostedFileBase
属性,因此没有必要使用Request.Form["InputFile"]
或Request.Files[0]
。只需使用(假设POST方法中模型的参数名为model
)
if (model.InputFile != null && model.InputFile.ContentLength > 0) {
.... // save file
我还建议使用强类型的HtmlHelper
方法
@Html.TextBoxFor(m => m.InputFile, new { type = "file", @class = "upload" })`