我使用<input type="file" />
标记将文件上传到服务器。如何在服务器端访问该文件并将其存储在服务器上? (该文件是图像文件)
客户端代码是:
<form id="form1" action="PhotoStore.aspx" enctype="multipart/form-data">
<div>
<input type="file" id="file" onchange="preview(this)" />
<input type="submit" />
</div>
</form>
Photostore.aspx.cs有
protected void Page_Load(object sender, EventArgs e)
{
int index = 1;
foreach (HttpPostedFile postedFile in Request.Files)
{
int contentLength = postedFile.ContentLength;
string contentType = postedFile.ContentType;
string fileName = postedFile.FileName;
postedFile.SaveAs(@"c:\test\file" + index + ".tmp");
index++;
}
}
我尝试上传jpg文件。无法查看已保存的文件。出了什么问题?
答案 0 :(得分:6)
您需要添加id
和runat="server"
属性,如下所示:
<input type="file" id="MyFileUpload" runat="server" />
然后,在服务器端,您可以访问控件的PostedFile
属性,该属性将为您提供ContentLength
,ContentType
,FileName
,{{3 }}属性和InputStream
方法等:
int contentLength = MyFileUpload.PostedFile.ContentLength;
string contentType = MyFileUpload.PostedFile.ContentType;
string fileName = MyFileUpload.PostedFile.FileName;
MyFileUpload.PostedFile.Save(@"c:\test.tmp");
或者,您可以使用SaveAs
为您提供所有上传文件的集合:
int index = 1;
foreach (HttpPostedFile postedFile in Request.Files)
{
int contentLength = postedFile.ContentLength;
string contentType = postedFile.ContentType;
string fileName = postedFile.FileName;
postedFile.Save(@"c:\test" + index + ".tmp");
index++;
}
答案 1 :(得分:2)
我认为文件输入需要名称标签:
<input type="file" name="file" />
没有这个,我什么都没回来。
我可能特定于我的机器的其他问题:
我得到了
Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFile'.
行
错误
foreach (HttpPostedFile postedFile in Request.Files)
所以我的最终代码如下:
for (var i = 0; i < Request.Files.Count; i++)
{
var postedFile = Request.Files[i];
// do something with file here
}
答案 2 :(得分:0)
查看ASP.NET提供的asp:FileUpload控件。
答案 3 :(得分:0)
如果您不想在工具箱中使用FileUpload控件,请为您的输入提供ID,然后使用form [id]访问输入字段并将其强制转换为HtmlInputFile。
答案 4 :(得分:0)
如果您为input-tag指定了id并添加了runat =“server”属性,那么您可以轻松访问它。
首先更改输入标记:<input type="file" id="FileUpload" runat="server" />
然后将以下内容添加到Page_Load方法:
if (FileUpload.PostedFile != null)
{
FileUpload.PostedFile.SaveAs(@"some path here");
}
这会将您的文件写入您选择的文件夹。如果需要确定文件类型或原始文件名,可以访问PostedFile对象。