文件的上传与接收
用户可以通过表单上传文件。
表单准备
如果表单要包括文件上传组件,在定义表单的时候,要将enctype设置为"multipart/form-data",例如:
<form enctype='multipart/form-data' action='accept.htm'
method='post' id='form1' name='form1'>
</form>
否则,HttpServer将无法收到用户上传的文件。
在表单插入一个type为file的input元素,即可实现文件上传,例如:
<input type='file' name='up1' id='up1'>
如果要允许用户选择多个文件上传,加上multiple属性即可,例如
<input type='file' name='up2' id='up2' multiple>
下面是一个完整的文件上传表单:
<form enctype='multipart/form-data' action='accept.htm' method='post' id='form1'
name='form1'>
单文件上传: <input type='file' name='up1' id='up1'><br/><br/>
多文件上传: <input type='file' name='up2' id='up2' multiple><br/><br/>
<input Type='submit' name='Sumbit' id='Sumbit' value='确定'>
</form>
接收文件
HttpRequest的e参数有个Files属性,这是一个字典,键为文件上传组件的name属性,值是一个字符串集合,包括用户通过这个上传组件上传的所有文件名。
HttpRequest的e参数有个SaveFile方法,用于保存接收到的文件,其语法为:
SaveFile(Key,UploadFile,LocalFile)
Key | 文件上传组件的name属性 |
UploadFile | 用户上传的文件名称,不含路径。 |
LocalFile | 要保存到本地的文件名称,含路径 |
完整示例
将HttpRequest设置为以下代码:
Select
Case e.Path
Case "upload.htm"
Dim sb
As New
StringBuilder
sb.appendLine("<form
enctype='multipart/form-data' action='accept.htm' method='post'
id='form1' name='form1'>")
sb.appendLine("单文件上传:
<input type='file' name='up1' id='up1'><br/><br/>")
sb.appendLine("多文件上传:
<input type='file' name='up2' id='up2' multiple><br/><br/>")
sb.appendLine("<input
Type='submit' name='Sumbit' id='Sumbit' value='确定'>")
sb.appendLine("</form>")
e.WriteString(sb.ToString)
Case "accept.htm"
Dim sb
As New
StringBuilder
For Each
key As
String In
e.Files.Keys
sb.AppendLine(key
&
"
上传"
& e.Files(key).Count
&
"个文件,分别是:</br>")
For Each
fl As
String In
e.Files(key)
sb.AppendLine(fl
& "<br>")
e.SaveFile(key,fl,"d:\web\uploadfiles\"
& fl)
'保存接收到的文件
Next
sb.AppendLine("</br>")
Next
sb.AppendLine("以上文件服务器已正确接收并保存!")
e.WriteString(sb.ToString)
End
Select
上面的代码生成了两个页面,upload页面用于上传文件:
accept.htm页面用于显示并保存用户上传的文件: