ASMX文件上传

时间:2011-01-25 22:15:34

标签: c# .net web-services asmx

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

UPD

P.S.file大小可以是2-10 GB

5 个答案:

答案 0 :(得分:9)

不确定

[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 protocol with streaming已针对处理此类方案进行了优化。

答案 1 :(得分:2)

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

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

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

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

这使得上传内容更具容错性,并且在UI中响应更快。

如果您有兴趣,this is a CP article of the tool

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)