原文出处:[习题]FileUpload 批次上传 / 多档案同时上传,上传成功后展示图片 (VB语法)
http://www.dotblogs.com.tw/mis2000lab/archive/2010/12/01/fileupload_show_image_20101201.aspx
[习题]FileUpload控件「批次上传 / 多档案同时上传」,上传成功后展示图片 (VB语法)
有人在论坛上发问:
「档案透过 FileUpload控件 上传成功之后,
如何 "立即" 呈现在画面上呢?」
这很简单,请参阅以前的范例:
VB语法: FileUpload控件「批次上传 / 多档案同时上传」的范例 (VB语法)
C#语法: [C#]FileUpload控件「批次上传 / 多档案同时上传」的范例
沿用上面的范例,继续作下去即可。
ASP.NET案例精编——适用于VS 2005/2008(配光盘)(1). 在 HTML画面的最下方,添加几个 Image控件。
<p> <!-- 以上相同的部分省略,请沿用上面的范例即可 -->
<asp:LabelID="Label1" runat="server" ForeColor="#FF3300"></asp:Label><br/>
<asp:LabelID="Label2" runat="server"ForeColor="darkblue"></asp:Label>
<hr />
<span class="style3"><spanclass="style2">上传之后,立即呈现图片!<br />
<br />
</span></span>
<br />
<asp:Image ID="Image1"runat="server" Visible="False"/>
<asp:Image ID="Image2"runat="server" Visible="False"/>
<asp:Image ID="Image3"runat="server" Visible="False" /><br /><br/>
<asp:Image ID="Image4"runat="server" Visible="False"/>
<asp:Image ID="Image5"runat="server" Visible="False" />
</p>
把每一个 Image控件设定为 .Visible = False,让它隐形起来(看不见)
(2). 后置程序代码(VB)的范例里面,
我们在For...Next循环里面,加上这几列程序代码即可。很简单。
Protected Sub Button1_Click(ByVal senderAs Object, ByVal e As System.EventArgs) Handles Button1.Click
'--批注:网站上的目录路径。所以不写磁盘名称(不写 “实体”路径)。
'--以下的路径,请依照实际状况,进行修改。否则程序会报错!
Dim saveDir As String ="VS2010_Book_Sample\[Book]FileUpload\Uploads\"
Dim appPath As String =Request.PhysicalApplicationPath
Dim tempfileName As String =Nothing
Dim myLabel As NewSystem.Text.StringBuilder
Dim i As Integer
For i = 1 To (Request.Files.Count)
Dim myFL As New FileUpload
myFL =CType(Page.Form.FindControl("FileUpload" & i), FileUpload)
DimmyImg As New Image
myImg= CType(Page.Form.FindControl("Image" & i), Image)
If(myFL.HasFile) Then
Dim fileName As String = myFL.FileName
Dim pathToCheck As String = appPath & saveDir & fileName
'========================================(Start)
If (System.IO.File.Exists(pathToCheck)) Then
'=========================
'==省略,跟上面的范例程序一模一样。
'=========================
End If
' –完成档案上传的动作。
Dim savePath As String = appPath & saveDir & fileName
myFL.SaveAs(savePath)
'========================================(End)
myLabel.Append("<hr>檔名---- " & fileName)
'*******************************************************
'*** 上传后,立即展示图片 *************************
myImg.Visible = True
'--以下的路径,请依照实际状况,进行修改。否则程序会报错!
myImg.ImageUrl = "http://localhost:8080/WebSite1/这里是你上传档案的路径,请自行修改/" & fileName
'*******************************************************
EndIf
Next
Label2.Text = "上传成功" & myLabel.ToString
End Sub
=================================================================================
这个范例最有趣的地方,就是我用循环,
自动产生变量名称,例如: FileUpload1、FileUpload2、FileUpload3......等等。
或是 Image1、Image2、Image3......等等。
(请看上面红字的部分)
这种作法从以前ASP / JSP / PHP都可以用,一直到ASP.NET都可以继续这样玩下去。
我看见很多高手都会这招(常在程序代码里面有见过这种技巧),但好像没人想公开出来
(依照我的教学经验来看,对初学者来说,你讲了他们也「暂时」听不懂。)
=================================================================================
如果不使用上面的两种技巧,初学者也可以乖乖地用五个if判别式来作(以下是C#语法)
(一个FileUpload控件,就作一次, 程序代码不断COPY修改即可)。
只要程序能顺利执行,而且您又是刚刚入门的初学者......没人敢说这样做不好。以下是范例:
if (FileUpload1.HasFile)
{
string fileName =FileUpload1.FileName;
//……内容与上面范例相同,在此省略……
FileUpload1.SaveAs(savePath);
myLabel.Append("<br>檔名---- " + fileName);
}
if (FileUpload2.HasFile)
{
string fileName =FileUpload2.FileName;
//……省 略……
FileUpload2.SaveAs(savePath);
}
if (FileUpload3.HasFile)
{
string fileName =FileUpload3.FileName;
//……省 略……
FileUpload3.SaveAs(savePath);
}
//……以此类推…… 这种Copy / Paste的作法很累吧~
学生(初学者)还在学习中,所以写出上面的程序,我不会责怪他,毕竟能正确执行更重要。
但如果进入业界,还用这种Copy / Paste的方法来写程序,可能会被前辈「念」一顿
您可以参阅这篇文章([回忆].....一些感慨 #2.....什么样的程序?什么样的写法?对初学者有帮助),我有作了解释。
在我的书本里面,有数个范例都用上这个技巧。
例 如:
上集的「FileUpload」多重档案批次上传、网络聊天室,介绍 Application与Session的最佳案例(用来解说Application与 Session的应用)
下集也有「自动化投票区」使用了相同的技巧。
希望对您有帮助。
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)