HtmlInputFile对象与HTML文件输入元素对应。你可用由id属性指定的名称来访问它。它有下列特性:
选择文件后,就可以用代码来保存文件。HtmlinputFile的PostedFile属性控制文件是否有效的信号。在提交文件的页面与处理上传的页面为同一页面时,实例代码工作正常,但情况并非总是如此。我们来了解一下如何在不同页面中处理文件上传!
在不同页面中处理上传
我在最近的一个项目中应用一个以Flash为基础的界面来收集用户反馈及上传文件。Flash对象包含在一个HTML文件中,而上传处理与内容则位于另一个ASP.NET页面内。.NET Framework使这一处理过程变得简单。
ASP.NET Request对象中包含由用户提交的一切内容。Request类的Files特性可方便地对用户上传的文件进行访问。Files特性返回一个HttpFileCollection类的实例,它是HttpPostedFile对象的集合(即由用户提交的文件)。这两个类可方便地处理引入的文件。列表D中的C#实例说明了这一处理过程。(列表E包含对应的VB.NET实例。)
列表D
<%@ Page language="c#" %>
<script language="c#" runat="Server">
string uploadFolder = "files";
private void Page_Load(object sender, System.EventArgs e) {
if (!IsPostBack) {
try {
HttpFileCollection uploads = Request.Files;
HttpPostedFilepostedFile = null;
string savePath = Server.MapPath(uploadFolder);
string filename;
for (int x=0; x <= (uploads.Count); x++) {
postedFile = uploads[x];
int pos = postedFile.FileName.LastIndexOf("\\");
if (pos > 0) {
filename = postedFile.FileName.Substring(pos + 1);
} else {
filename = postedFile.FileName;
}
postedFile.SaveAs(savePath + "\\" + filename);
}? } catch (Exception ex) {
// Handle exception
} } }
</script>
列表E
<%@ Page language="vb" ContentType="text/plain" debug="true" %>
<script language="vb" runat="Server">
Dim uploadFolder As String
Sub Page_Load()
If Not (IsPostBack) Then
Try
Dim uploads As HttpFileCollection
uploads = Request.Files
Dim postedFile As HttpPostedFile
Dim savePath As string
savePath = Server.MapPath(uploadFolder)
Dim filename As String
Dim x As Integer
Dim pos As Integer
For x = 0 to (uploads.Count - 1)
postedFile = uploads(x)
pos = postedFile.FileName.LastIndexOf("\")
If (pos > 0) Then
filename = postedFile.FileName.Substring(pos + 1)
Else
filename = postedFile.FileName
End If
postedFile.SaveAs(savePath + "\" + filename)
Next x
Catch ex As Exception
' Handle exception
End Try
End If
End Sub
</script>
此代码通过HttpFileCollection对象来恢复上传文件集,并通过一个for循环,以HttpPostedFile对象处理每个上传文件,并为每个对象调用SaveAs方法,将其保存在网络服务器中。