今天要写一个小web application,允许用户上传最多到3张图片(网页上有3个文件上传框),然后将图片压缩之后添加到email中作为附件,最后用服务器上的smtp server发送email。听起来很简单,但是当中却包含了一个潜在的usability问题。
这个问题发生在,当用户没有使用第一个上传框而是用第二个或是第三个上传框,当我在Iterate httpUploadedFiles时,就会导致第一个上传文件为空。这样当我再将这个空的图片作为附件添加到email的时候,就会导致错误。当然,按照一般的使用规律,用户当然会先选择第一个上传框,然后第二个……但是不能够排除某些时候的特定情况,这也是程序强健性的表现。
这个问题有两种解决方法,
1. 修改页面结构。一开始只显示一个上传框,如果有必要,允许用户“添加下一张图片”,就像hotmail那样。
2. 用程序来检测哪个上传框中真正上传了文件。
我采用了第二个办法,下面是代码:
Dim hpc As HttpFileCollection = HttpContext.Current.Request.Files
Dim ht2 As New Hashtable
If Not hpc Is Nothing Then
Dim i As Integer = 0
Dim c As Integer = 0
While c < hpc.Count
Dim file As System.Web.HttpPostedFile = hpc(c)
If (Not file Is Nothing) And (file.ContentLength > 0) Then
Dim str As String = SaveImage(file)
ht2.Add("Image" & i.ToString(), str)
i = i + 1
End If
c = c + 1
End While
End If
Dim ht2 As New Hashtable
If Not hpc Is Nothing Then
Dim i As Integer = 0
Dim c As Integer = 0
While c < hpc.Count
Dim file As System.Web.HttpPostedFile = hpc(c)
If (Not file Is Nothing) And (file.ContentLength > 0) Then
Dim str As String = SaveImage(file)
ht2.Add("Image" & i.ToString(), str)
i = i + 1
End If
c = c + 1
End While
End If