asp.net如何把文件上传到另外一台服务器?我用映射网络盘的形式,可是程序无法将文件保存到网络映射盘上.
如何共享文件夹的话,文件夹必须有写入的权限,可是这样的话局域网内所有的人都可以上传到这个共享目录了?大家帮帮忙?多谢了啊!

解决方案 »

  1.   

    你可以单独为Ftp上传建一用户啊,这样别人没有使用共享目录的
      

  2.   

    这个我正好做过的,呵呵,给你参考
    假设有服务器A是web服务器,文件要通过A服务器上的web程序上传到B上面
    1、在B上面共享一个文件夹,记得设置好权限,给某个用户有写入的权限
    2、在A服务器上的网站下面建立一个虚拟目录,虚拟目录的指向改为另外一台计算机上的共享,输入刚才设定的用户帐号和密码
    3、在A服务器上传的时候,通过server.mappath("虚拟目录")名来获取上传地址
    4、解决权限问题,只有在建立信任的基础上,你才能向B服务器上传文件,建议在Global.asax中加载,这样网站一运行就建立了信任,不用每次都去建立。建立信任的语句:
    System.Diagnostics.Process.Start("net.exe", "use \\\\B服务器的IP\\共享文件夹 \"B服务器上的密码\" /user:\"B服务器上的用户名\"");  
    上面提到的B服务器上的用户是指能写入那个共享文件夹的用户!
      

  3.   

    忘了,记得你那个用户要能运行net.exe文件的权限!
      

  4.   

    bluesky1314520(bluesky)的方法可行吗?
    关注。
      

  5.   

    bluesky1314520(bluesky) 和liujiwe79(专业做控件)的方法我还在试
      

  6.   

    TO:bluesky1314520(bluesky)
    在A服务器上的网站下面建立一个虚拟目录,虚拟目录的指向改为另外一台计算机上的共享没发在共享目录建立虚拟目录,能告诉我你是怎么做到的?
    谢谢!
      

  7.   

    A服务器上你的web程序在IIS下面不是一个站点嘛
    在这个站点下面建立一个虚拟目录
      

  8.   

    to:bluesky1314520(bluesky) 
    但是没法指向另外一台服务器上的共享,只能是本机磁盘.
      

  9.   

    TO:viena(维也纳N02)
    程序文件和数据文件是分开的啊?
    A服务器上放程序文件,B服务器放数据库及文件,因为A服务器磁盘空间不是很大.在B服务器放入上传程序也是可以,可是A程序执行的时候怎么调用B上面的上传程序.
    还请指教,谢谢!
      

  10.   

    to:bluesky1314520(bluesky) 
    但是没法指向另外一台服务器上的共享,只能是本机磁盘.
    ——---------------------------
    虚拟目录“属性”->看看你选择路径的上面
    “另一台计算机上的共享”不可能没看到吧
      

  11.   

    //可是A程序执行的时候怎么调用B上面的上传程序
    在B上设置ASP.NET运行环境,A的页面直接转向B的页面或者在A页面IFrame内嵌一个B上的页面
      

  12.   

    //可是A程序执行的时候怎么调用B上面的上传程序
    在B上设置ASP.NET运行环境,A的页面直接转向B的页面或者在A页面IFrame内嵌一个B上的页面
    这样的安全性太低了吧?而且权限验证也麻烦
      

  13.   

    to:bluesky1314520(bluesky) 
    可以设置虚拟目录共享了,可是上传的时候:
    "在A服务器上传的时候,通过server.mappath("虚拟目录")名来获取上传地址"server.mappath("虚拟目录")得到的是本机的地址啊!
    给点实例代码,谢谢了.
      

  14.   

    TO:bluesky1314520(bluesky)
    终于可以了啊!但是还有个问题,运行A服务器上的程序,如何链接到B服务器上的文件.
    比如说有一个图片以上上传到B服务器了,A程序运行的时候如何显示这张图片?
      

  15.   

    简单的测试虚拟目录设置是否正确!
    假设A是你web站点的服务器 B是你要上传文件的服务器
    1、在B服务器上共享一个文件夹upload,并设置好权限 开设用户test 密码123456 并给予test对upload的写入权限,同时在该文件夹里放入一个简单的页面,随便什么都行,输出几个字母就可以了【B服务器上的操作over】
    2、在A服务器web站点下面建立一个虚拟目录,默认加虚拟目录的时候是没得选择其他服务器的共享文件夹的,你先随便选择一个本地的路径,建立好之后,点击该虚拟目录的属性,在更改本地路径的上面,有3个选择,你选择“另一台计算机上的共享”,接着设置网络路径,格式是这样的:\\{服务器}\{共享名},{服务器}用IP来代替,{共享名}就是那个upload文件夹,填好之后点击后面的“连接用户”,输入刚才在B服务器上用户test 和密码123456(当然,简单一点,你最好先测试一下,确定A服务器能访问B服务器共享的文件夹,如果A都不能访问B的共享,那你先解决这个问题先,测试的方法很简单,在浏览器里输入\\B服务器的IP\upload,如果能输入用户和密码之后能看到你刚才随便建的那个文件,OK,共享是可以访问的)
    3、虚拟目录设置好了之后,你可以测试一下,在A的web站点下面通过程序获取一下虚拟目录的路径,如果是成功的,路径应该是服务器B的IP+upload文件夹。
    4、接下来的工作就是上传文件了,这个时候你直接上传应该都是可以的,应该你刚才已经输入过访问B服务器upload的帐号和密码,也就是说A和B已经建立了信任连接,不过如果你重启服务器,刚才建立的连接也就不存在了。所以在A服务器web站点的Global.asax文件里加载一句话,让A服务器站点启动的时候就和B建立信任连接
    System.Diagnostics.Process.Start("net.exe", "use \\\\B服务器的IP\\upload \"123456\" /user:\"test\"");  
    上面的语句就是建立信任连接的,放在global.asax的好处就是站点启动就建立连接,因为这种信任连接是可持续性的,不会象session一样过期,只有在重启A服务器的时候这种信任连接才会消失。不晓得你明白没有?不过我可以肯定,这个是可以实现的,因为我刚刚做过这块。
    后话:至于上传到B服务器上的文件怎么访问,那就比较方便了。
    一种方式:还是通过A服务器web站点下面的虚拟目录来访问,这种情况下,B服务器只是提供空间
    另一种方式:在B服务器上建立一个站点,指向该目录,这样B服务器分担了访问文件时IIS的工作任务
      

  16.   

    TO:bluesky1314520(bluesky)
    谢谢!你这种方式很好,已经解决.可我在A站点浏览B服务器的文件方式还没有解决?
    因为只有A服务器是可以对外的,B服务器只是在局域网内.
      

  17.   

    TO:bluesky1314520(bluesky)
    A站点浏览B服务器文件已解决,谢谢!多谢大家!
    困扰我好久的问题已经解决,我想这个问题不是我一个人遇到过.
      

  18.   


    兄弟 我也遇到同样的问题 需要同样的解决方案 求给份代码给我 ....拜谢拜谢了 [email protected]