我前台把要上传的文件都存在listbox里面,后台取到客户端文件路径,如何上传到服务器呢?

解决方案 »

  1.   

    你应该是C/S结构的吧
    **//// <summary>
      /// WebClient上传文件至服务器
      /// </summary>
      /// <param name="fileNamePath">文件名,全路径格式</param>
      /// <param name="uriString">服务器文件夹路径</param>
      private void UpLoadFile(string fileNamePath,string uriString)
      {
       string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1);
       NewFileName = DateTime.Now.ToString("yyMMddhhmmss") + DateTime.Now.Millisecond.ToString() + fileNamePath.Substring(fileNamePath.LastIndexOf(".")); 
       string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
       if(uriString.EndsWith("/") == false) uriString = uriString + "/";   uriString = uriString + NewFileName;
       /**//// 创建WebClient实例
       WebClient myWebClient = new WebClient();
       myWebClient.Credentials = CredentialCache.DefaultCredentials;   // 要上传的文件
       FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
       //FileStream fs = OpenFile();
       BinaryReader r = new BinaryReader(fs);
       try
       {
        //使用UploadFile方法可以用下面的格式
        //myWebClient.UploadFile(uriString,"PUT",fileNamePath);
        byte[] postArray = r.ReadBytes((int)fs.Length);
        Stream postStream = myWebClient.OpenWrite(uriString,"PUT");
        if(postStream.CanWrite)
        {
         postStream.Write(postArray,0,postArray.Length);
        }
        else
        {
         AppHelper.MessageService.ShowError("文件目前不可写!");
        }
        postStream.Close();
       }
       catch
       {
        AppHelper.MessageService.ShowError("文件上传失败,请稍候重试~");
       }
      }循环调用UpLoadFile方法就可以了
    for (int 1=0;i < this.ListBox1.Items.Count;i++)
    {
      UpLoadFile(this.ListBox1.Items(i).Text,url);
    }
      

  2.   

    http://blog.csdn.net/wo789/archive/2007/11/13/1882176.aspx
      

  3.   

    友情UP一下,LZ先说说是CS的还是BS的
      

  4.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=58EA3515-36F2-4FD9-AC89-EAF49F59816C   
    孟老大的
      

  5.   

    b/s的只能用<input type="file"
    这种方式,由用户选择后上传
    上传动作本身是由浏览器自动完成的,只要提交
    服务器端用Request.Files来接收
    注意From必须有 enctype="multipart/form-data"属性
      

  6.   

    我客户端页面的listbox 列表有c:\a.txt c:\b.txt,后台有没简单的办法把这2个文件上传到服务器
      

  7.   

    很遗憾,这个在客户端很难实现!因为浏览器上传文件必须要包含<input   type= "file" />文件域,而且必须放到表单<from>标记中。
    浏览器为了安全,只允许你点击文件域的“浏览..”来选择文件或手工输入路径,而不允许你通过代码为文件域赋值。你客户端页面的listbox列表中的c:\a.txt   c:\b.txt,是怎么添加进去的?你怎么保证这两个文件存在呢?每个客户端的情况又不一样。楼主如果能把问题再描述清楚些,我想我很乐意帮忙。
      

  8.   

    我界面放了一个<inut type=file /> 然后又加了个添加按钮  先选择文件,然后点添加,调用脚本把文件加到listbox中,这样listbox就可以保存多个文件的路径,然后我想表单保存的时候,把这些文件一齐上传到服务器还没实现?
      

  9.   

    我做过这样,
    先生成一个结构
    里面放基本附件的信息,要是流的话(声明为引用类型),在结构中要申明,不确定,那就直接放Object
    在上传的时候,将结构加在数组里面(也可以用其他的,但必须是引用类型的),每增加一个,就在向数组里面,增加这个结构,然后,一次性全部提交.
      

  10.   

    你还是每选一个就追加一个FileUpload控件吧。现在看到的那些支持多个文件上传的都是这样的。
      

  11.   

    可以实现,动态创建<inut type=file />,选择文件,点添加后用脚本控制隐藏<inut type=file />,并创建新的<inut type=file />,同时在listbox添加一条,listbox只用来显示而已,实际上传还是用的<inut type=file,服务器端用Request.Files来接收就可以了
      

  12.   

    viena,你的建议不错,能否给个详细的例子看看,谢拉
      

  13.   

    //隐藏file控件
    ofile.style.display='none'; 
    //创建新file控件
    var f = document.createElement("input");
    f.type = 'file';
    f.name = 'file'+fileNum;
    f.id = 'file'+fileNum;
    f.size='20';
    f.className = 'in3';
    var div1 = document.getElementById("files")  
    div1.insertBefore(f,div1.firstChild);  
      

  14.   

    有个新问题啊,突然发现我的后台取不到fileupload的值 FileUpload1.PostedFile是null
    ,我的表单继承了一个基类的,跟这个是不是有关系
      

  15.   


    这是我用js在客户端写的一个动态添加删除文件域的效果图,点此处可以运行其代码如下:<script language="javascript">
    function add()
    {  
       var myFiles=document.getElementById("myFiles");
       var filediv=document.createElement("div");
       
       filediv.innerHTML="<input type=\"file\" />";
       myFiles.appendChild(filediv);
       var thisFile=filediv.childNodes[0];
       thisFile.click();
       
       if(checkRepeat(thisFile.value))
       {
          myFiles.removeChild(filediv);
      return;
       }
       
       var mySelect=document.getElementById("mySelect");
       var option=new Option(thisFile.value,thisFile.value);
       mySelect.options.add(option);
       mySelect.options.selectedIndex=mySelect.options.length-1;
       mySelect.size++;
    }function remove()
    {
       var mySelect=document.getElementById("mySelect");
       var selectedIndex=mySelect.selectedIndex;
       if(selectedIndex==-1)
       {
        alert("请选择要移除的文件!");
    return;
       }
       mySelect.options.remove(selectedIndex);
       if(selectedIndex==0)
            mySelect.options.selectedIndex=0;
       else
            mySelect.options.selectedIndex=selectedIndex-1;
       mySelect.size--;
       
       var myFiles=document.getElementById("myFiles");
       myFiles.removeChild(myFiles.childNodes[selectedIndex]);
    }function checkRepeat(filepath)
    {
    var myOptions=document.getElementById("mySelect").options;
    for(i=0;i<myOptions.length;i++)
    {
    if(myOptions[i].value==filepath)
    {
       alert("该文件已存在列表当中,请不要重复选择!");
       return true;
    }
    }
    return false;
    }
    </script><form action="" method="post" enctype="multipart/form-data" name="form1">
        <br>
    <div id="myFiles" style="display:none"></div>
        <br>
        <table width="200" border="1">
          <tr>
            <td align="center"><input name="button" type="button" onclick="add();" value="添加文件" />
                <input type="button"  onClick="remove();" name="buttonDelete" value="移除文件" /></td>
          </tr>
          <tr>
            <td>文件列表:</td>
          </tr>
          <tr>
            <td><select size="0" id="mySelect">
            </select></td>
          </tr>
          <tr>
            <td align="center"><input type="submit" name="Submit" value="上传"></td>
          </tr>
        </table>
    </form>...不知道满足你的要求不?
      

  16.   

    public void DoUpload(Object src,EventArgs e)
    {
    //取得上传文件的个数
    int FileCount = listbox.items.Count;
    string strFilename;
    string[] AFilename;
    char[] de = {'\\'};
    HttpPostedFile hpf; for(int i=0;i<FileCount;i++)
    {
    hpf = listbox.items[i];
    AFilename = hpf.FileName.Split(de);
    strFilename = AFilename[AFilename.Length-1];
    Response.Write(strFilename);
    hpf.SaveAs(Server.MapPath(".")+"\\"+strFilename);//自己写路径
    }
    }
      

  17.   

    viena:我根据你的代码改了下,不知为啥后台取不到file对象,下面是我的代码:
    前台:
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
        
    <script>
    var fileNum=0;
    function addinput()
    {
    //隐藏file控件 
    var   ofile   =   document.getElementById("file"+fileNum) ;
    alert(fileNum);
    alert(ofile);
    ofile.style.display= 'none';   
    //创建新file控件 
    var   f   =   document.createElement("input"); 
    fileNum=fileNum+1;
    f.type   =   'file'; 
    f.name   =   'file'+fileNum; 
    f.id   =   'file'+fileNum; 
    f.size= '20'; 
    f.className   =   'in3'; var   div1   =   document.getElementById("files")     
    //div1.insertBefore(f,div1.firstChild);   
    div1.insertAdjacentElement("BeforeBegin",f);  
    }
    function Button2_onclick() {
    }</script>
    </head>
    <body>
        <form id="form1" runat="server" enctype="multipart/form-data">
            &nbsp;<table>
     
            <tr class="formtb" style="color: #000000">
                <td style="width: 67px">
                
    <asp:ListBox id="ListBox1" runat="server"></asp:ListBox>
    <table><tr><td><div id="files">
                    <input id="file0" type="file" /></div></td></tr></table>                &nbsp;
                    <input id="Button2" type="button" value="button" onclick="return addinput()" />
                <td class="formtbesumes_annex" colspan="7">
                    &nbsp;<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="Button" /></td>
            </tr>
                    <tr></tr>
        
        </table>     </form>
    </body>
    </html>
    后台:
        protected void Button3_Click(object sender, EventArgs e)
        {        HttpFileCollection files1 = Request.Files;
       HttpFileCollection files = HttpContext.Current.Request.Files;
            for (int i = files.Count - 1; i >= 0; i--)
            {
                HttpPostedFile hpfile = files[i];
            }
        }
      

  18.   

    wo789,viena,你们好,能否指教下后台如何获取postfile.
      

  19.   

    用Request.Files可以啊,我这里在用没有问题~
      

  20.   

    viena,能告诉下你qq吗,加下我的2861037
    我这边request.files取不到input type=file的,单能取到fileupload的
      

  21.   

    Mark 一下,顺便贴一下我以前学习过的资料.
    在这个例子中,附件是保存在服务端.不是保存在数据库.//方法一:<%@ Import Namespace="System.IO" %>
    <%@ Page Language="C#" %><script runat="server">    protected void SubmitButton_Click(Object sender, EventArgs e){
           string filepath = "C:\\Uploads";
           HttpFileCollection uploadedFiles = Request.Files;
        
           for (int i = 0; i < uploadedFiles.Count; i++)
           {    
              HttpPostedFile userPostedFile = uploadedFiles[i];
        
              try
              {    
                 if (userPostedFile.ContentLength > 0 )
                 {
                    Span1.InnerHtml += "<u>File #" + (i+1) + 
                       "</u><br>";
                    Span1.InnerHtml += "File Content Type: " + 
                       userPostedFile.ContentType + "<br>";
                    Span1.InnerHtml += "File Size: " + 
                       userPostedFile.ContentLength + "kb<br>";
                    Span1.InnerHtml += "File Name: " + 
                       userPostedFile.FileName + "<br>";
        
                    userPostedFile.SaveAs(filepath + "\\" + 
                       Path.GetFileName(userPostedFile.FileName));
        
                    Span1.InnerHtml += "Location where saved: " + 
                       filepath + "\\" + 
                       Path.GetFileName(userPostedFile.FileName) + 
                       "<p>";
                 }    
              } 
              catch (Exception Ex)
              {    
                 Span1.InnerText += "Error: <br>" + Ex.Message;    
              }    
           }    
        }</script><html>
    <head>
    </head>
    <body>
        <form enctype="multipart/form-data" runat="server">
            <p>
                Select File1:<br />
                <input id="File1" type="file" runat="Server" />
                <br />
                Select File2:<br />
                <input id="File2" type="file" runat="Server" />
                <br />
                Select File3:<br />
                <input id="File3" type="file" runat="Server" />
                <br />
                Select File4:<br />
                <input id="File4" type="file" runat="Server" />
            </p>
            <p>
                <input id="Submit1" type="submit" value="Upload Files" 
                 runat="Server" onserverclick="SubmitButton_Click" />
                <br />
            </p>
            <span id="Span1" runat="Server"></span>
        </form>
    </body>
    </html>
     方法二:
    /// <summary>
        /// 多附件的上传
        /// </summary>
        /// <returns>bool</returns>
        private bool upMoreFiles(Guid Sn)
        {
            System.Web.HttpFileCollection files = Request.Files;
            if (files.Count < 1)
                return false;
            try
            {
                string fileName, fileExt,fileType,filePath,fileSize;
                wppContractDB wppdb = new wppContractDB();
                for (int i = 0; i < files.Count; i++)
                {
                    System.Web.HttpPostedFile PostedFile = files[i];
                    fileName = System.IO.Path.GetFileName(PostedFile.FileName);
                    if (fileName != string.Empty)
                    {
                        fileExt = System.IO.Path.GetExtension(fileName);
                        fileType = PostedFile.ContentType.ToString();
                        if (PostedFile.ContentLength > 0)
                        {
                            float nSize = (float)PostedFile.ContentLength / 1048576;
                            fileSize = nSize < 1 ? (((int)(nSize * 1024 + 1)).ToString() + " KB") : (nSize.ToString("0.0") + " MB");
                        }
                        else
                            fileSize = string.Empty;
                        filePath = "\\"+fileName;
                        Guid fileID = Guid.NewGuid();                    wppdb.InsertAdjContract(fileID,Sn, fileName, filePath,fileSize, fileType);
                        wppFolderOp folderop = new wppFolderOp();
                        folderop.aSn = Int32.Parse(Session["CType"].ToString());
                        folderop.LoadFolderInfo();
                        PostedFile.SaveAs(Server.MapPath("..") +folderop.aPath+ filePath);
                    }
                }
                return true;
            }
            catch (System.Exception error)
            {
               // strStatus.Text = error.Message;
                return false;
            }
        }
      

  22.   

    MARK ,顺便贴一下,我以学习用过的二个方法
    Mark 一下,顺便贴一下我以前学习过的资料.
    在这个例子中,附件是保存在服务端.不是保存在数据库.//方法一:<%@ Import Namespace="System.IO" %>
    <%@ Page Language="C#" %><script runat="server">    protected void SubmitButton_Click(Object sender, EventArgs e){
           string filepath = "C:\\Uploads";
           HttpFileCollection uploadedFiles = Request.Files;
        
           for (int i = 0; i < uploadedFiles.Count; i++)
           {    
              HttpPostedFile userPostedFile = uploadedFiles[i];
        
              try
              {    
                 if (userPostedFile.ContentLength > 0 )
                 {
                    Span1.InnerHtml += "<u>File #" + (i+1) + 
                       "</u><br>";
                    Span1.InnerHtml += "File Content Type: " + 
                       userPostedFile.ContentType + "<br>";
                    Span1.InnerHtml += "File Size: " + 
                       userPostedFile.ContentLength + "kb<br>";
                    Span1.InnerHtml += "File Name: " + 
                       userPostedFile.FileName + "<br>";
        
                    userPostedFile.SaveAs(filepath + "\\" + 
                       Path.GetFileName(userPostedFile.FileName));
        
                    Span1.InnerHtml += "Location where saved: " + 
                       filepath + "\\" + 
                       Path.GetFileName(userPostedFile.FileName) + 
                       "<p>";
                 }    
              } 
              catch (Exception Ex)
              {    
                 Span1.InnerText += "Error: <br>" + Ex.Message;    
              }    
           }    
        }</script><html>
    <head>
    </head>
    <body>
        <form enctype="multipart/form-data" runat="server">
            <p>
                Select File1:<br />
                <input id="File1" type="file" runat="Server" />
                <br />
                Select File2:<br />
                <input id="File2" type="file" runat="Server" />
                <br />
                Select File3:<br />
                <input id="File3" type="file" runat="Server" />
                <br />
                Select File4:<br />
                <input id="File4" type="file" runat="Server" />
            </p>
            <p>
                <input id="Submit1" type="submit" value="Upload Files" 
                 runat="Server" onserverclick="SubmitButton_Click" />
                <br />
            </p>
            <span id="Span1" runat="Server"></span>
        </form>
    </body>
    </html>
     方法二:
    /// <summary>
        /// 多附件的上传
        /// </summary>
        /// <returns>bool</returns>
        private bool upMoreFiles(Guid Sn)
        {
            System.Web.HttpFileCollection files = Request.Files;
            if (files.Count < 1)
                return false;
            try
            {
                string fileName, fileExt,fileType,filePath,fileSize;
                wppContractDB wppdb = new wppContractDB();
                for (int i = 0; i < files.Count; i++)
                {
                    System.Web.HttpPostedFile PostedFile = files[i];
                    fileName = System.IO.Path.GetFileName(PostedFile.FileName);
                    if (fileName != string.Empty)
                    {
                        fileExt = System.IO.Path.GetExtension(fileName);
                        fileType = PostedFile.ContentType.ToString();
                        if (PostedFile.ContentLength > 0)
                        {
                            float nSize = (float)PostedFile.ContentLength / 1048576;
                            fileSize = nSize < 1 ? (((int)(nSize * 1024 + 1)).ToString() + " KB") : (nSize.ToString("0.0") + " MB");
                        }
                        else
                            fileSize = string.Empty;
                        filePath = "\\"+fileName;
                        Guid fileID = Guid.NewGuid();                    wppdb.InsertAdjContract(fileID,Sn, fileName, filePath,fileSize, fileType);
                        wppFolderOp folderop = new wppFolderOp();
                        folderop.aSn = Int32.Parse(Session["CType"].ToString());
                        folderop.LoadFolderInfo();
                        PostedFile.SaveAs(Server.MapPath("..") +folderop.aPath+ filePath);
                    }
                }
                return true;
            }
            catch (System.Exception error)
            {
               // strStatus.Text = error.Message;
                return false;
            }
        }
      

  23.   

    不好意思,网络不好,发了二次.
    可以通过脚本动态的创建上传控件,我记得以前163,sina的邮箱就是这样子的.
      

  24.   

     使用循环,一个一个上传listbox中的文件了
      

  25.   

    http://www.qddm.com/FILE_LOAD/download.aspx
      

  26.   

    viena:我增加了input 如何根据id删除这个input 呢
      

  27.   

    两种解决方案:
    一、asp.net+Flash,可以一次性批量选择上传的文件,显示上传详细进度,界面非常友好。
    二、一个一个文件添加(现在用的上传方式基本上都是这种),本人觉得用Discuz论坛那种界面方式不错。
    服务器可以用Request.File方式获得,用SaveAs()保存即可。
      

  28.   

    求助:  Request.Files.count  ;//为什么始终只有一个啊,我add 了n个啊?upload.aspx: <table> 
      <td     id   =   "td_fileupload"   height="20"   align="left"   style="font-family:   Arabic   Transparent"> 
                        <button   type="button"   name="BtnNewAttach"   onclick="AddFileUploadControl();"> New... </button> 
                          <asp:Button   ID="Button1"   runat="server"   Text="   Submit   "   OnClick="Button1_Click"   Font-Names="Arabic   Transparent"   /> 
    </td> 
    </table> function   AddFileUploadControl()   
    {                 var   id   =   "FileUpload"   ; 
                    var   control   =   document.getElementById(id);"); 
                    if(control   ==   null 
                    {                 
                          var   form   =   document.getElementById("form1"); 
                          var   inp   =   document.createElement("input") 
                          inp.type   =   "file"; 
                          inp.name   =   id;; 
                          inp.id   =   id; 
                          document.all.td_fileupload.appendChild(inp);"); 
                        return   false; 
    } protect   void   Button1_Click(object   sender,eventargs   e) 

          int count=   Request.Files.count  ;//为什么始终只有一个啊,我add 了n个啊?
    为}