第一种:通过FTP来上传文件首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了。第二种:通过WebClient来上传文件如:现在的开发的web应用程序的虚拟目录是WebAA,另一个应用程序的虚拟目录是WebBB,现在要从WebAA向WebBB下的一个UpLoadFiles文件夹下保存图片第三种:通过Web Service来上传文件 //上传文件至WebService所在服务器的方法,这里为了操作方法,文件都保存在UpDownFile服务所在文件夹下的File目录中
        [WebMethod]
        public bool Up(byte[] data, string filename)
        {
            try
            {
                FileStream fs = File.Create(Server.MapPath("File/") + filename);
                fs.Write(data, 0, data.Length);
                fs.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
想知道上面几种方式的优劣,或者谁那边有好的高性能文件上传的源码提供,不胜感激

解决方案 »

  1.   

    ftp需要另外部署ftp 服务器,第二个办法通用性最好,第三个办法需要服务器支持
      

  2.   

    webclient要在web服务器进行配置,比如设置允许put动作和设置权限等。另外,web service如果要实现复杂的上传功能,比如断点续传需要自行实现,但ftp自带命令。所以结论是:如果要实现简单的文件上传,优先使用方法3,如果要实现复杂的文件上传功能,优先使用方法1. 总的评价是:1>3>2.
      

  3.   

    ftp 超级慢、卡、不稳定。使用比较直接的 http 方式即可。至于说有没有必要将 byte[ ] 用 WCF 服务封装,这个也许算是个人爱好了。就好象有的人喜欢在大夏天还穿冬天的衣服鞋子一样。反正我是整个WCF都弃用的,WCF最初的目标是为了封装复杂的RPC调用,微软虽然被轻量化的 http 调用风格逼着把 WCF 做了许多次简化重新包装,但是它对我来说其实还是夏天穿翻毛皮鞋似地。但是对于初学者,以入门教程为基准,觉得WCF更符合教程上的说法,这是可以理解的。
      

  4.   

    我以前回复过的例子:http://bbs.csdn.net/topics/391031875抄代码其实就不在同一个角度讨论问题了,我们应该看到背后的实质。WCF是对“服务”的上传下载数据格式、客户端代理机制、服务器的服务程序注册和发现机制进行了封装。而这种代价,其实对于我这样更愿意用最近5年的潮流来设计web端的人看来,WCF通常是不在第一时间考虑的。第一时间你只要支持一个所有的通用 web 客户端(包括浏览器上的 js 程序,jQuery.ajax 方法等等)支持的精简的 http post/get 数据服务功能即可。
      

  5.   

    另外我在上面的例子中,可能主要是为了回答那个帖子的问题,所以例子中的功能是以“字符串”为目标的。而假设要上传一个 byte[ ],那么显然只要写byte[] data = .......;
    var data = new WebClient().UploadData("http://localhost:2171/TestWebClientUpload2.ashx?filename" + urlencodeFileName +"&position"+ position, data); 
    那么你的服务器端直接从 Request.InputStream 中读取 data,然后保存到相应文件的 position 偏移位置。代码跟上传一个字符串类似。
      

  6.   

    第2种方法我没用过,学习了。
    就我自己的经验,1,3都可行,ftp服务架设我用filezilla server比较多一些。ftp可以以二进制字节形式传输,webservice是http传输,这种写法一般也是把字节数组base64编码后再传,体积略大于原始字节数组的。大的文件,传输效率上,是低于ftp的。
      

  7.   


    http 消息体是二进制数据。假设你把二进制刻意地当作string来传送,才需要base64编码。普通的 http post 传送数据是不需要考虑编码的,所 post data 本身就是byte [ ]。
      

  8.   


    还可以用html5的 Web Socket api传输文件,不过要浏览器支持,直接用js来传输文件。
      

  9.   

    http://bbs.csdn.net/topics/392070135
      

  10.   

    webapi,建立一个服务接口,看看微信,云空间,怎么不让你用FTP上传的?
      

  11.   

    ws上传文件的方式一般不推荐,毕竟ws已经是一种古老的技术了
    新的服务接口目前一般都是基于webapi的rest接口ftp,sftp之类的,除非有密码安全之类的限制,否则一般不需要ftp所以,要看你的场景究竟如何,才能判断究竟该采用哪种方案