在浏览器端,用户选中了自己本地的一个目录,如何把这个目录上传到web服务器上,望各位大侠指教。另外的400分我会再开别的贴子给分。

解决方案 »

  1.   

    除非用ActiveX或内嵌WinForm控件,否则普通的web控件无法实现这样的要求,不知道楼主说的“用户选中自己本地的一个目录”是如果实现的?
      

  2.   

    <script language="VB" runat="server">
    Sub UploadFile(sender As Object, e As EventArgs)If FileUp.PostedFile.ContentLength = 0 Then
    FileInfo.Visible = False
    Exit Sub
    Else
    FileInfo.Visible = True
    FDisplay1.Visible = True
    End IfFSize.Text ="上传文件大小"+ CStr(FileUp.PostedFile.ContentLength/1024)+"KB"
    FName.Text = "已上传文件名:"+FileUp.PostedFile.FileName+"<br>"+FName.Text'写入数据库
    on error resume next
    dim myconn as sqlconnection
    dim mycomm as sqlcommand
    dim sql as string
    dim id as integer
    Dim image,anewimage As System.Drawing.Image
    dim width,height,newwidth,newheight as integer
    Dim callb As System.Drawing.Image.GetThumbnailImageAbort
    myConn=New sqlconnection(ConfigurationSettings.AppSettings("数据库"))
    myconn.open()
    sql="insert into picture (姓名,班级,介绍,属性) values ('"&request.cookies("dgxyl").values("dgxylname")&"','"&request.cookies("dgxyl").values("dgxylbj")&"','"&trim(request("TextBox1"))&"','"&request("r1")&"')"
    Mycomm=New sqlcommand(sql,myconn)
    mycomm.executenonquery()
    myconn.close()Dim myCommand As New SqlCommand("select top 1 id from picture order by id desc", myConn)
    myCommand.Connection.Open()
    Dim myReader As SqlDataReader=mycommand.executereader()
    if myReader.Read() then
    id=myReader("id")
    end if
    myconn.close()
    '保存图片
    FileUp.PostedFile.SaveAs( Server.MapPath("\classpic\")&cstr(id)&".jpg" )
    '生成缩略图
    image=System.Drawing.Image.FromFile(Server.MapPath("/classpic/"+cstr(id)+".jpg"))
    width=image.Width
    height=image.height
    if width>height then
    newwidth=250
    newheight=image.height/image.Width*newwidth
    else
    newheight=250
    newwidth=image.Width/image.height*newheight
    end if
    response.write("id="+cstr(id)+"width="+cstr(Width)+";height="+cstr(height)+"  ")
    response.write("newwidth="+cstr(newwidth)+";newheight="+cstr(newheight)+"<br>")aNewImage=image.GetThumbnailImage(newwidth,newheight,callb,new System.IntPtr())
    aNewImage.Save(Server.MapPath("/smallpic/"+cstr(id)+".jpg"))
    image.Dispose()
    Dim FileSplit() As String = Split( FileUp.PostedFile.FileName, "\" )
    Dim FileName As String = FileSplit(FileSplit.Length-1)
    Dim Exts() As String = Split( FileName, "." )
    Dim Ext As String = LCase(Exts(Exts.Length-1))FDisplay.Text = "<A Target='_blank' HREF='/classpic/"&cstr(id)&".jpg"& "'>查看上传文件</A>"
    FDisplay1.text="<a href='/picture/default.asp?bj="&cstr(request.cookies("dgxyl").values("dgxylbj"))&"'>返回</a>"
    End Sub
    </script>
    <SCRIPT language=JavaScript>
    <!--
    var requestsubmitted=false;
    function guestbook_Validator(theForm)
    {
    //检查是否从新提交
    if (requestsubmitted==true){
      alert("你已经提交了留言,请等待服务器应答!");
      return(false);
     }
    requestsubmitted=true;return (true);
    }
    //-->
    </SCRIPT>
    <Html>
    <Body BgColor=White>
    <H3 align="center">请正确填写下面各项</h3>
    <Hr></H3>
    <Div id="FileInfo" Visible="False" runat="server">
     <Asp:Label id="FSize" runat="server"/><br>
     <Asp:Label id="FName" runat="server"/><br>
    <Asp:Label id="FDisplay" runat="server"/>
     <Asp:Label id="FDisplay1" runat="server"/>
    </Div>
    <Form Enctype="multipart/form-data" onsubmit="return guestbook_Validator(this)" runat="server">
    上传文件
    <Input Type="File" id="FileUp" runat="server" size="20"><br>
    图片属性:<input type="radio" value="<%=request.cookies("dgxyl").values("dgxylbj")%>" name="R1" checked>本班<input type="radio" value="全校" name="R1">全校(本班则只在本班显示,全校则在全校显示)<P>
    图片说明:<br>
    <asp:TextBox id="TextBox1" runat="server" Width="233px" Height="141px">
    </asp:TextBox>
            <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="请输入图片说明">
    </asp:RequiredFieldValidator><br>
    <Asp:button id="Upload" OnClick="UploadFile" Text="上传图片" runat="server"/>
    </form>
    <Hr>
    <p>注意:</p>
    <ol>
      <li><b>严禁上传污染环境的照片,否则账号将被删除!</b></li>
      <li><font color="#808000"><b>请详细填写照片说明,图片说明不详细将会被视为乱传图片,将会被删除!</b></font></li>
    </ol>
    <p> </p></Body>
    </Html>
      

  3.   

    你本地文件怎么检索?
    客户端浏览器是不给你随便访问客户端文件权限的。
    所以除非你用active或者.net组件,你没有别的办法。
      

  4.   

    自己做个资源管理器,把目录和文件前,都加上复选框。这样就可以选择目录了。至于如何上传整个目录,上面的很多朋友已经说很清楚了,你可以先在服务器建立一个folder,然后遍历你要上传目录的文件,一个一个传。
      

  5.   

    就目前来看,智能客户端还不完善
    不如做个Active X控件
      

  6.   

    To webdiyer(陕北吴旗娃):
    抱歉,用户没有办法选中自己本地的一个目录,我是从程序的其他条件知道用户是传哪一个目录的,假设我已经知道用户要传本地的哪个目录。
    ---------------------------------
    如何遍历用户本地目录的全部文件哪?
      

  7.   

    不行的,除非用ActiveX或嵌入的WinForm控件,否则就算知道用户要上传的文件所在的目录也不能实现上传文件,原因可以想象得出来:如果从web页上可以随意把客户端的一个目录上传到服务器端,那客户端还有什么安全性可言?
      

  8.   

    大家不要只讲方向,还是把实现的方法和代码贴出来吧。
    goody9807的方法好像只能传文件,不能传目录,不过还是谢谢goody9807。
      

  9.   

    如果浏览器可以检索客户端的文件目录,还可以根据检索结果将文件上传到服务器的话,我们使用浏览器还有什么安全性可言,那岂不是我们访问一个网站,服务器可以获得我们机器上的全部资料
    当然以上基于不使用ActiveX和Winform控件,不降低浏览器安全权限的情况即使你知道了客户端目录,要想上传该目录下的文件,如果使用<input type=file>控件也不行,因为其value属性是只读的----------------------------------------------------------------------
    欢迎试用ASP.NET大文件上传组件(AspnetUpload 1.1 Release & 无刷新进度条)
    http://www.cnblogs.com/bestcomy/archive/2004/06/09/14267.aspx
    http://bestcomy.europe.webmatrixhosting.net
    ----------------------------------------------------------------------
      

  10.   

    就是不是ActiveX和Winform控件,javascript也能访问用户的硬盘,有些恶意网站还能访问注册表呢。
      

  11.   

    给个Ftp空间给客户,再先程序对其上传的东西进行处理上传目录应该不大可能的
      

  12.   

    如何遍历用户本地目录的全部文件哪?
    using System.IO
    public ArrayList GetFile(string strPathName)
    {
    ArrayList newList=new ArrayList();
    DirectoryInfo dir=new DirectoryInfo(strPathName);
    foreach(FileSystemInfo sFsi in dir.GetFileSystemInfos())
    {
    if(sFsi is FileInfo)
    {
    FileInfo f=(FileInfo)sFsi;
    newList.Add( f.FullName);//改为f.Name获得文件名和扩展名
    }
    else
    {
    DirectoryInfo dr=(DirectoryInfo)sFsi;
    newList.AddRange(GetFile(strPathName+ "\\"+dr.Name));
    }
    }
    return newList;
    }
      

  13.   

    将个目录打包成Zip文件,上传后用程序进行处理也不错
      

  14.   

    调用web服务http://dotnet.aspx.cc/ShowDetail.aspx?id=6381BD5F-51F3-4339-4239-1328564A1B2A
      

  15.   

    使用ActiveX吧,如果你想实现这种效果,服务器端时不可能操作客户端的.