MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

原文出处:[习题]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"/>&nbsp;&nbsp;&nbsp;
       <asp:Image ID="Image2"runat="server" Visible="False"/>&nbsp;&nbsp;&nbsp;
       <asp:Image ID="Image3"runat="server" Visible="False" /><br /><br/>
       <asp:Image ID="Image4"runat="server" Visible="False"/>&nbsp;&nbsp;&nbsp;
       <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的应用)


下集也有「自动化投票区」使用了相同的技巧。

希望对您有帮助。

posted on 2010-12-28 17:48  MIS2000 Lab.  阅读(418)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub