C# ASMX文件上载
有没有一种方法可以使用ASMXWeb服务(没有WCF,不要问为什么:)将文件从本地文件系统上载到服务器中的文件夹 UPD 另外,文件大小可以是2-10 GB,当然:C# ASMX文件上载,c#,.net,web-services,asmx,C#,.net,Web Services,Asmx,有没有一种方法可以使用ASMXWeb服务(没有WCF,不要问为什么:)将文件从本地文件系统上载到服务器中的文件夹 UPD 另外,文件大小可以是2-10 GB,当然: [WebMethod] public void Upload(byte[] contents, string filename) { var appData = Server.MapPath("~/App_Data"); var file = Path.Combine(appData, Path.GetFileNam
[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中的已针对处理此类情况进行了优化。对于非常大的文件,将其发送到web服务的唯一有效方法是使用。MTOM是唯一的,你已经排除了。使用老式的.asmxweb服务实现这一点的唯一方法是@Darin Dimitrov给出的答案。使用该解决方案,您将不得不承受文件进行base64编码的成本(带宽增加33%)我们也有同样的要求,基本上是使用客户端的标准
FileUpload
控件通过HTTP POST上传文件。
最后,我们在ASMXWeb服务项目中添加了一个ASPX页面(毕竟它只是一个web项目)——这允许我们上传到,即http://foo/bar/Upload.aspx
当web服务处于http://foo/bar/baz.asmx
。这使功能保留在web服务中,即使它使用的是单独的web页面
这可能符合您的要求,也可能不符合您的要求,@Darins方法也可以作为一种解决方案,但您必须在客户端进行修改,这对我们来说不是一个选项。在开发免费工具将大文件上传到服务器时,我还使用.NET 2.0和web服务 为了使应用程序对非常大的文件更具容错性,我决定不上传一个大的
byte[]
数组,而是进行“chuncked”上传
也就是说,对于上传一个1 MB的文件,我会调用我的upload SOAP函数20次,每次调用都会传递一个50 KB的字节[]
数组,并将其再次集中到服务器上
我还数了数包裹,当其中一个掉下来时,我又试着上传了好几次
这使得上传在UI中更具容错性和响应能力
如果您感兴趣,.您可以尝试将文件转换为Base64,并将其作为字符串传递给服务,然后再转换回字节数组
@scartag,是的,这就是我的意思。@2xMax,对于大文件,您会遇到问题:-)您需要增加web.config中的最大请求大小,对于真正大的文件,您会遇到更大的问题。有一些先进的协议,比如MTOM和流媒体,但是有了ASMX,你就必须实现它们。IIRC有一些用于ASMX的SOAP扩展可以与MTOM一起使用,但在这个阶段,它们应该是非常不受欢迎的,我甚至不会去想它。。我想是的:)@2xMax如果您具有所需的连接速度/带宽,您可以传输大文件。。。怕它超时…我想了想。但我也认为这可能会导致大量的bug:)是的,它花了相当长的时间才成为一个圆形的东西。