`
061041033
  • 浏览: 37703 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

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

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

以前也做过这方面,用的是.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();
            }

        }
 
分享到:
评论

相关推荐

    PHP如何将图片文件上传到另外一台服务器上

    主要介绍了PHP如何将图片文件上传到另外一台服务器上,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    linux下同时上传文件到多台服务器

    linux下同时上传文件到多台服务器。值得一看

    FTP上传和下载,可以通过本地和服务器之间建立间接,通过FTP方式进行文件操作等

    FTP上传和下载,可以通过本地和服务器之间建立间接,通过FTP方式进行文件操作等

    微信小程序上传文件到文件服务器.rar

    2、文件有分为两种上传文件方式:第一种上传到java本地服务器,访问Controller为IndexController文件;第二种是上传到文件服务器,NginxContoller和UploadController都是实现这个功能。区别是NginxController是分别...

    html5上传图片转换成base64值传入后台,再转换为图片保存在服务器

    后续更新成base64数据保存到数据库,直接base64转换成图片保存在服务器,数据库存储相关信息,下载或者查看的时候直接调用相对路径的文件即可。 毕竟base64的数据保存到数据库太影响查询了。另外在存储文件的时候...

    Android-AndroidLog日志打印输出到文件方便查看和上传到服务器

    Android一个简单实用把Log日志打印到手机本地文件,可以自行取出来上传到服务器开源代码

    c# 用Base64实现文件上传

     使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格式,后台通过高级编程语言,将base64格式的文件,转换为原文件。下面就来演示一下,C#语言配合js,如何实现图片的base64格式上传与解析保存。...

    将手机文件上传至网站服务器

    实现前,需先有一台已假设完成的WEB SERVER,并编写一个接收文件的程序部署在服务器上,另外请预先在手机目录下准备要上传的文件。以本范例而言,文件路径如下:/data/data/irdc.ex08_11/image.jpg 分享参考自...

    java实现两台服务器间文件复制的方法

    主要介绍了java实现两台服务器间文件复制的方法,是对单台服务器上文件复制功能的升级与改进,具有一定参考借鉴价值,需要的朋友可以参考下

    服务器上文件传输在Web Client上的进度显示功能源码

    参照刘作晨的文件上传ajax进度显示功能实现的从Tomcat服务器上传输文件到另一台Tomcat服务器,在Web页面ajax显示传输进度。并可根据上传的视频文件自动生成mobile端可浏览的web page put 到对应的tomcat目录。

    js读取本地文件到字节数组

    在web应用中,免不了把图片文件上传到服务器,当然途径不知一种。但是为了使后台接收上传文件的方法既使用网页上传,又适应桌面应用程序上传,方法的参数设置成两个,一个为字符串类型,接收文件名,另一个为字节...

    FileUploadUtil.java(文件上传工具类)

    文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否超过要求,上传多张图片到服务器,上传图片到服务器,上传文件(在指定目录下创建年月日目录),上传导入文件到temp文件夹下,删除指定...

    Java实现上传文件图片到指定服务器目录

    本文通过实例代码给大家介绍了java上传文件图片到指定服务器目录的相关知识,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    Shell脚本实现复制文件到多台服务器的代码分享

    在多机集群环境中,经常面临修改配置文件后拷贝到多台服务器的情况,传统的执行scp比较麻烦,所以写了以下shell脚本,可以将指定文件拷贝到多台机器。 使用方法请参见HELP部分代码。 #!/bin/bash help() { cat &...

    基于HTTP文件上传工具--服务器端程序

    执行upload.exe程序启动服务器,监听端口8080,在浏览器中访问服务器...例如,upload.exe在IP地址为192.168.1.222的机器上启动,即可在局域网中的任何一台机器访问http://192.168.1.222:8080, 然后将文档上传给服务器。

    ASP.NET将文件写到另一服务器(图文教程)及注意事项

    有时我们需要将来自于客户端的文件上传到WEB服务器端,并在服务端将文件存储到第三方文件服务器中存储,既然有需求,那就有实现了,感兴趣的你可以了解此文,或许对你学习asp.net 起到很好的作用哦

    基于ASP.NET Core的可伸缩、通用的文件服务器

    一个基于ASP.NET Core的可伸缩、通用的文件服务器。 通常后端项目可能会有头像、图片、音频、视频等上传/下载需求,这些需求都可以抽象为文件服务。 功能特点 支持Linux(推荐)、Windows 可伸缩式架构,支持部署1-...

    文件服务器规划设计.docx

    Web应用服务器与文件服务器的交互过程基本上由4步来完成: 第一步:设定FUSConfig各种参数,确定上传模式 Web应用服务器中,文件上传组件[即fus文件夹]需要被放入到根目录下。同时,需要上传文件的页面中,进行配置...

    Web应用安全:使上传文件在服务器上作为脚本执行实验.docx

    绕过文件上传检测并上传脚本文件到服务器上 连接服务器上的脚本文件 二、实验内容 首先寻找可以上传文件的位置,使用不同的方式试探如何绕过文件上传校验,上传脚本文件后使用webshell软件连接脚本文件进入后台。 ...

Global site tag (gtag.js) - Google Analytics