2011-01-25 81 views
7

有沒有辦法使用ASMX Web服務將文件從本地文件系統上傳到服務器中的文件夾(沒有WCF,不要問爲什麼:)?ASMX文件上傳

UPD

psfile中大小可以2-10 GB

回答

2

當開發我的免費工具上傳大文件到服務器時,我也使用.NET 2.0和Web服務。

爲了讓應用程序對於非常大的文件更容錯,我決定不上傳一個大的byte[]數組,而是做一個「chuncked」上傳。

I.e.爲了上傳一個1 MB的文件,我確實會調用我的上傳SOAP函數20次,每次調用都會傳遞一個50 KB的byte[]數組,並再次將它在服務器上重新組合在一起。

我也計算了軟件包,當掉落的時候,我嘗試再次上傳幾次。

這使得上傳更容錯並且在用戶界面中更具響應性。

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

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中生成一個客戶端代理,調用,標準的東西。

-

UPDATE:

我現在看到你更新有關處理大型文件。內置於WCF中的MTOM protocol with streaming針對處理這種情況進行了優化。

+0

buffer ???我想你的意思是...... – scartag 2011-01-25 22:19:34

+0

大文件呢? – 2xMax 2011-01-25 22:19:58

0

對於非常大的文件,將它們發送到Web服務的唯一有效方法是使用MTOM。而MTOM只有supported in WCF,你已經排除了。用老式的.asmx網絡服務做到這一點的唯一方法就是@Darin Dimitrov給出的答案。通過這種解決方案,您將不得不承擔基於base64編碼的文件的成本(帶寬增加33%)。

0

我們有相同的要求,基本上通過HTTP POST使用客戶端的標準FileUpload控件上傳文件。 最後,我們剛剛爲ASMX Web服務項目添加了一個ASPX頁面(畢竟它只是一個Web項目) - 這使我們能夠在網絡服務爲http://foo/bar/baz.asmx時上傳到http://foo/bar/Upload.aspx。這保留了Web服務中的功能,即使它使用了單獨的網頁。

這可能會或可能不符合您的要求,@達林方法也可以作爲一種解決方法,但您必須在客戶端進行修改,因爲這不是我們的選擇。