如何把文件上传到另外一台服务器

别来无恙 提交于 2020-02-26 17:59:59

假定有两台服务器:A和B,其中A为Web服务器(IP:192.123.1.1, 为iis发布程序的服务器 ),B为文件服务器(IP: 192.123.2.2)

  1. 在文件服务器B中某个磁盘下创建一个共享文件夹DocShare,同时在该服务器上创建一个用户,如docUser, 并给此用户分配共享文件夹的读写权限
  2. 在WEB服务器A中也创建同一个用户,如 docUser, 同时密码与B中的docUser必须保持一致。并将用户docUser加入到IIS_WPG用户组
  3. 创建一个新的应用程序池docPool, 并设置权限认证,输入用户名docUser及密码。
  4. 将IIS发布的程序其应用程序池设置为docPool
  5. 在IIS发布的程序根目录下添加一个虚拟目录,名称为files,虚拟目录映射到服务器B的共享目录路径,如:\\192.123.2.2\DocShare 同时设置特定用户访问,输入用户名docUser,密码。
  6. 在程序代码中,设置文件的保存路径为 Server.MapPath(“files”) 即:虚拟目录的路径。

http://www.cnblogs.com/guangpeng/archive/2013/04/09/3009600.html

 


在程序部署上经常遇到一个问题,为了安全,速度,一般都是把数据库和程序分开放在不同的服务器.一般对外一台服务器就够了,其它如果想对外,通过这台对外服务器就可以实现.

刚不久在做一个项目遇到了一个问题,程序所在的服务器空间小,另外购置了一台数据服务器(存储数据库及文件).程序里多个地方用到了附件上传,一般上传文件都放在程序目录下.可这次不一样,要放在另外一台服务器.
开始时我觉得很简单,只要建立网络映射不就可以了吗?只要有足够的权限,和操作本机盘有什么区别呢?

以前也做过这方面,用的是.net winform汇总excel,当时一点问题都没有.这次是webform,问题来了,程序根本找不到.
这下好了,想了好多方面还是没有解决,在网上也没搜索到,于是在CSDN中发了请求帖,终于解决.
http://community.csdn.net/Expert/topic/5470/5470471.xml?temp=.5512812

摘要如下:

简单的测试虚拟目录设置是否正确!
假设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的工作任务

 

文件上传保存:
SaveAs(Server.MapPath("abc") + "\\" + filePath.Substring(filePath.LastIndexOf("\\") + 1));
//abc为程序运行站点或者虚拟目录下的虚拟目录

文件浏览:
DownloadFile(Server.MapPath("abc") + "//abc.txt");
//abc.txt为B服务器上的文件

private void DownloadFile(string physicalFilePath)
        {
            FileStream stream = null;
            try
            {
                stream = new FileStream(physicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
                int bufSize = (int)stream.Length;
                byte[] buf = new byte[bufSize];

                int bytesRead = stream.Read(buf, 0, bufSize);
                HttpContext.Current.Response.ContentType = "application/octet-stream";
                //attachment是以附件的形式下载,也可以改为online在线找开. 
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(physicalFilePath), System.Text.Encoding.UTF8));
                HttpContext.Current.Response.OutputStream.Write(buf, 0, bytesRead);
                HttpContext.Current.Response.End();
            }
            finally
            {
                stream.Close();
            }
        } 

http://www.cnblogs.com/cnaspnet/archive/2008/09/23/716881.html

 


 

自己尝试操作的:

首先保证内网的网站服务器能访问到 文件服务器。

1、在文件服务器上创建用户  例如:用户名:UploadUser、 密码:123456

2、在文件服务器上创建共享文件夹  例如:Data_qz 同时增加用户UploadUser对于此文件夹的读写权限。

3、在网站服务器上创建同名,同密码的用户。

4、将网站的IIS重新启动运行。

注:需要在webconfig文件中的  <appSettings>节点下,创建节点UploadPath。 例如:<add key="UploadPath" value="\\文件服务器IP\共享文件夹\"/>,如:“\\192.168.0.7\Data_qz\”。

 

webconfig:

    <add key="UploadPath" value="\\192.xxx.0.x\Data_qz\"/>
    <add key="UploadUser" value="UploadUser"/>
    <add key="UploadPwd" value="Aa123456"/>

 

Global.asaxvoid Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
        System.Diagnostics.Process.Start("net.exe", "use \\"+ConfigurationManager.AppSettings["UploadPath"].Trim()
+" \""+ConfigurationManager.AppSettings["UploadPwd"].Trim()+"\" /user:\""+ConfigurationManager.AppSettings["UploadUser"].Trim()+"\"");
    }

 

页面上传代码:
//本地上传
f_upload.SaveAs(Request.MapPath("../Data/Appraise") + @"\" + announceDoc.FileUrl.Trim()); 
//异地上传f_upload.SaveAs(ConfigurationManager.AppSettings["UploadPath"].Trim() + @"Data\\Appraise\\" + announceDoc.FileUrl.Trim());

 

//前台控件<asp:FileUpload runat="server" ID="f_upload" />


页面上传代码:
//本地上传
f_upload.SaveAs(Request.MapPath("../Data/Appraise") + @"\" + announceDoc.FileUrl.Trim()); 

//异地上传
f_upload.SaveAs(ConfigurationManager.AppSettings["UploadPath"].Trim() + @"Data\\Appraise\\" + announceDoc.FileUrl.Trim());

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!