ASMX文件上传

有没有办法使用ASMX Web服务将文件从本地文件系统上传到服务器中的文件夹(没有WCF,不要问为什么:)?

UPD

PSfile大小可以是2-10 GB

在开发我的免费工具以将大文件上传到服务器时,我也在使用.NET 2.0和Web服务。

为了使应用程序对非常大的文件具有更大的容错能力,我决定不上传一个大byte[]数组,而是进行“chuncked”上传。

即上传一个1 MB的文件,我会调用我的上传SOAP函数20次,每次调用传递一个50 KB的byte[]数组并再次在服务器上将它连接起来。

我也计算包裹,当一滴,我尝试再次上传它几次。

这使得上传在UI中更具容错性和响应性。

如果您有兴趣, 这是该工具的CP文章 。

当然:

 [WebMethod] public void Upload(byte[] contents, string filename) { var appData = Server.MapPath("~/App_Data"); var file = Path.Combine(appData, Path.GetFileName(filename)); File.WriteAllBytes(file, contents); } 

然后公开服务,从WSDL生成客户端代理,调用,标准的东西。

更新:

我现在看到有关处理大文件的更新。 内置于WCF中的具有流的MTOM协议被优化用于处理这样的场景。

对于非常大的文件,将它们发送到Web服务的唯一有效方法是使用MTOM 。 并且只有WCF支持 MTOM,你已经排除了它。 使用旧式.asmx Web服务的唯一方法是@Darin Dimitrov给出的答案。 使用该解决方案,您将不得不承受文件的成本为base64编码(带宽增加33%)。

我们有相同的要求,基本上是使用客户端的标准FileUpload控件通过HTTP POST上传文件。 最后,我们刚刚向ASMX Web服务项目添加了一个ASPX页面(毕竟它只是一个Web项目) – 这允许我们在Web服务处于http://foo/bar/baz.asmx时上传到http://foo/bar/Upload.aspx http://foo/bar/baz.asmx 。 这使得Web服务中的function保持不变,即使它使用单独的网页。

这可能或可能不符合您的要求,@ Darins方法也可以作为一种解决方法,但您必须在客户端进行修改,这对我们来说不是一个选项。