我正在通过HTML输入type =“ file”通过“上传”控件创建一个表单
这是我的html代码:
<form id="form1" runat="server" enctype="multipart/form-data">
<div class="form-group">
<asp:label ID="Label1" runat="server" For="message-text" class="col-form-label">Transaction Slip:</asp:label><br />
<input type="file" name="FileUpload" class="btn btn-light" accept="image/*"/>
</div>
</form>
以及下面的.cs背后的代码:
protected void btnSubmit_Clicked(object sender, EventArgs e)
{
HttpPostedFile postedFile = Request.Files["FileUpload"];
string filePath = Server.MapPath("~/TransacSlip/") + Path.GetFileName(postedFile.FileName);
postedFile.SaveAs(filePath);
}
但是我收到以下错误:
“ /”应用程序中的服务器错误。 对象引用未设置为对象的实例。
错误行:
第78行:字符串filePath = Server.MapPath(“〜/ TransacSlip /”)+ Path.GetFileName(postedFile.FileName);
有人知道如何解决这个问题吗? 非常感谢〜
答案 0 :(得分:1)
将runat="server"
添加到类型文件控件的html输入中,如下面的代码所示,那么您将在代码隐藏的后面有一个发布的文件,否则Request.Files集合将在代码隐藏的后面为空。
<input type="file" name="FileUpload" class="btn btn-light" accept="image/*" runat="server"/>
现在,由于没有文件被发布,因此postedFile变量为null,因此,当您调用方法或访问此变量的属性时,它将引发null引用异常。就您而言,postedFile.FileName
将在您的代码隐藏中导致此异常。
替代解决方案:
如果您不想将runat="server"
属性用于文件类型的输入控件,请确保页面中的表单的enctype属性设置为multipart/form-data
,如以下代码所示。这也将解决您的问题。如果遵循这种方法,则无需添加runat =“ server”属性。
<form id="form1" runat="server" enctype="multipart/form-data">
答案 1 :(得分:0)
请尝试使用此代码
//Access the File using the Name of HTML INPUT File.
HttpPostedFile postedFile = Request.Files["FileUpload"];
//Check if File is available.
if (postedFile != null && postedFile.ContentLength > 0)
{
//Save the File.
string filePath = Server.MapPath("~/TransacSlip/") + Path.GetFileName(postedFile.FileName);
postedFile.SaveAs(filePath);
lblMessage.Visible = true;
}
答案 2 :(得分:0)
我将在这里使用的完整解决方案发布给也需要此功能的其他人。
HTML / ASP.Net中的代码(请记住要放入enctype =“ multipart / form-data”)
<form id="form1" runat="server" enctype="multipart/form-data">
<input type="file" name="FileUpload" class="btn btn-light" accept="image/*"/>
<asp:Button ID="TestButton" runat="server" Text="Button" OnClick="TestButton_Clicked" />
</form>
背后的代码(c#)
使用System.IO;
protected void TestButton_Clicked(object sender, EventArgs e)
{
//To get the file from HTML Input File
HttpPostedFile postedFile = Request.Files["FileUpload"];
//String your relative folder path
string folderPath = Server.MapPath("~/FolderName/");
//Check if your folder is exist or not, if not then created folder automatically
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
//Check did your control have image uploaded
if (postedFile != null && postedFile.ContentLength > 0)
{
//To prevent duplicated name (accidently replace), using GUID code to store your image
string GUIDCode = System.Guid.NewGuid().ToString("N");
string filePath = folderPath + GUIDCode + ".jpg";
postedFile.SaveAs(filePath);
}
else if (postedFile == null && postedFile.ContentLength <= 0)
{
// Do your thing when control have no image uploaded
}
}