有没有办法使用ASMX Web服务将文件从本地文件系统上传到服务器中的文件夹(没有WCF,请不要问为什么:)?
UPD
P.S.file大小可以是2-10 GB
答案 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)