在asp.net中访问服务器端的输入类型文件

时间:2010-01-04 09:35:01

标签: asp.net html file-upload

我使用<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文件。无法查看已保存的文件。出了什么问题?

5 个答案:

答案 0 :(得分:6)

您需要添加idrunat="server"属性,如下所示:

<input type="file" id="MyFileUpload" runat="server" />

然后,在服务器端,您可以访问控件的PostedFile属性,该属性将为您提供ContentLengthContentTypeFileName,{{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。

示例:http://www.codeproject.com/KB/aspnet/fileupload.aspx

答案 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对象。