这样的功能还能否优化?一个论坛,发帖子的时候可以上传图片,一个帖子可以包含多个图片,我做了一个“上传图片”的按钮,点这个按钮会将图片的相关信息填写的一个TextBox控件里,还有一个“发布帖子”按钮,点这个按钮可以将textBox里的信息,写入数据库。但是对文件上传的原理不是很了解,有个疑问:因为只有一个Form,所以选择文件以后,不点击“上传”,直接点击“发布”,虽然发布里面没有保存文件的代码,但是会不会存在一个隐含的文件上传的过程,造成带宽浪费呢?

解决方案 »

  1.   

    用TextBox无法上传文件,所以你的代码中就算点击了“上传图片”按钮也没有任何文件被上传到服务器端,要上传文件必须用HtmlInputFile控件。
      

  2.   

    http://www.ldxk.com/Net/ShowArticle.asp?ArticleID=87
      

  3.   

    HtmlInputFile 类System.Object
       System.Web.UI.Control
          System.Web.UI.HtmlControls.HtmlControl
             System.Web.UI.HtmlControls.HtmlInputControl
                System.Web.UI.HtmlControls.HtmlInputFile[Visual Basic]
    Public Class HtmlInputFile
       Inherits HtmlInputControl
       Implements IPostBackDataHandler[C#]
    public class HtmlInputFile : HtmlInputControl, IPostBackDataHandler备注
    使用 HtmlInputFile 服务器控件可以处理从浏览器客户端向服务器上载的二进制文件或文本文件。可以在 Microsoft Internet Explorer 3.02 或更高版本中上载文件。注意   为使此控件正常工作,必须将 HtmlForm 的 Enctype 属性设置为 "multipart/form-data"。
    若要指定要上载的文件,请在控件的文本框中输入文件的完整路径(例如,“C:\MyFiles\Test.txt”)。您也可通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件。HtmlInputFile 控件没有用于回发到服务器的内置方式。要将文件上载到服务器,请使用 PostedFile 属性中包含的 System.Web.HttpPostedFile 的 SaveAs 方法。此操作通常在事件处理方法(如按钮单击事件的事件处理方法)中进行。注意   使用 SaveAs 方法时,确保指定文件的完整路径(例如,“C:\MyFiles\Test.txt”)。否则,会尝试将文件放置在 systemroot\system32\inetsrv 目录中。默认情况下,此目录是写保护的;因此,文件不能保存在这里。确保为 ASP.NET 使用的帐户提供要存储文件的目录的写权限。
    上载大文件时,可使用 <httpRuntime> 元素的 maxRequestLength 属性来增加文件大小的最大允许值。当文件超出指定的大小时,浏览器中会产生 DNS 错误。上载大文件时,还可能会收到以下错误信息:aspnet_wp.exe (PID: 1520) 被回收,因为内存消耗超过了 460 MB(可用 RAM 的百分之 60)。如果遇到此错误信息,请增加应用程序的 Web.config 文件的 <processModel> 元素中 memoryLimit 属性的值。有关 HtmlInputFile 实例的初始属性值列表,请参见 HtmlInputFile 构造函数。示例
    [Visual Basic, C#, JScript] 该示例说明如何使用 HtmlInputFile 控件创建简单的文件上载方案。为了使该示例正常运行,您需要在 C: 驱动器上创建名为 TEMP 的目录。[Visual Basic] 
    <%@ Page Language="VB" AutoEventWireup="True" %><html>
     <head>
     
        <script language="VB" runat="server">
           Sub Button1_Click(Source As Object, e As EventArgs)
                
                If Text1.Value = "" Then
                    Span1.InnerHtml = "Error: you must enter a file name"
                    Return
                End If
                
                If Not (File1.PostedFile Is Nothing) Then
                    Try
                        File1.PostedFile.SaveAs(("c:\temp\" & Text1.Value))
                        Span1.InnerHtml = "File uploaded successfully to <b>c:\temp\" & _
                                          Text1.Value & "</b> on the Web server"
                    Catch exc As Exception
                        Span1.InnerHtml = "Error saving file <b>c:\temp\" & _
                                          Text1.Value & "</b><br>" & exc.ToString()
                    End Try
                End If
            End Sub 'Button1_Click 
        </script>
     
     </head>
     <body>
     
        <h3>HtmlInputFile Sample</h3>
     
        <form enctype="multipart/form-data" runat="server">
     
           Select File to Upload: 
           <input id="File1" 
                  type="file" 
                  runat="server">
     
           <p>
           Save as filename (no path): 
           <input id="Text1" 
                  type="text" 
                  runat="server">
     
           <p>
           <span id=Span1 
                 style="font: 8pt verdana;" 
                 runat="server" />
     
           <p>
           <input type=button 
                  id="Button1" 
                  value="Upload" 
                  OnServerClick="Button1_Click" 
                  runat="server">
     
        </form>
     
     </body>
     </html>[C#] 
    <%@ Page Language="C#" AutoEventWireup="True" %><html>
     <head>
     
        <script language="C#" runat="server">
     
           void Button1_Click(object Source, EventArgs e) 
           {
     
              if (Text1.Value == "") 
              {
                 Span1.InnerHtml = "Error: you must enter a file name";
                 return;
              }
     
              if (File1.PostedFile != null) 
              {
                 try
                 {
                    File1.PostedFile.SaveAs("c:\\temp\\"+Text1.Value);
                    Span1.InnerHtml = "File uploaded successfully to <b>c:\\temp\\" + 
                                      Text1.Value + "</b> on the Web server";
                 }
                 catch (Exception exc) 
                 {
                    Span1.InnerHtml = "Error saving file <b>c:\\temp\\" + 
                                      Text1.Value + "</b><br>" + exc.ToString();
                 }
              }
           }
     
        </script>
     
     </head>
     <body>
     
        <h3>HtmlInputFile Sample</h3>
     
        <form enctype="multipart/form-data" runat="server">
     
           Select File to Upload: 
           <input id="File1" 
                  type="file" 
                  runat="server">
     
           <p>
           Save as filename (no path): 
           <input id="Text1" 
                  type="text" 
                  runat="server">
     
           <p>
           <span id=Span1 
                 style="font: 8pt verdana;" 
                 runat="server" />
     
           <p>
           <input type=button 
                  id="Button1" 
                  value="Upload" 
                  OnServerClick="Button1_Click" 
                  runat="server">
     
        </form>
     
     </body>
     </html>[JScript] 
    <%@ Page Language="JScript" AutoEventWireup="True" %><html>
     <head>
     
        <script language="JSCRIPT" runat="server">
           function Button1_Click(source : Object, e : EventArgs){
                
                if(Text1.Value == ""){
                    Span1.InnerHtml = "Error: you must enter a file name"
                    return
                }
                
                if(File1.PostedFile != null){
                    try{
                        File1.PostedFile.SaveAs(("c:\\temp\\" + Text1.Value))
                        Span1.InnerHtml = "File uploaded successfully to <b>c:\\temp\\"
                                        + Text1.Value + "</b> on the Web server"
                    }catch(exc : Exception){
                        Span1.InnerHtml = "Error saving file <b>c:\\temp\\"
                                        + Text1.Value + "</b><br>" + exc.ToString()
                    }
                }
            }
        </script>
     
     </head>
     <body>
     
        <h3>HtmlInputFile Sample</h3>
     
        <form enctype="multipart/form-data" runat="server">
     
           Select File to Upload: 
           <input id="File1" 
                  type="file" 
                  runat="server">
     
           <p>
           Save as filename (no path): 
           <input id="Text1" 
                  type="text" 
                  runat="server">
     
           <p>
           <span id=Span1 
                 style="font: 8pt verdana;" 
                 runat="server" />
     
           <p>
           <input type=button 
                  id="Button1" 
                  value="Upload" 
                  OnServerClick="Button1_Click" 
                  runat="server">
     
        </form>
     
     </body>
     </html>
      

  4.   

    http://blog.csdn.net/21aspnet/archive/2004/10/24/149867.aspx