2012-08-25 57 views
1

我正在使用webclient通過UploadFileAsync方法上傳相對大文件(40mb)。使用monodroid上傳大文件

正如我在模擬器上測試這個,連接速度非常快。我可以看到UploadProgressChanged正在頻繁地被調用,並在大約20秒內達到100%。

但是,UploadFileCompleted不會被要求另一個12分鐘!

如果我上傳一個較小的文件(比如500kb),上傳文件完成幾乎一旦上傳進度達到100%就會被調用。

我想知道這是否與線程有關?儘管如此,我無法想象。

就網絡服務器而言,它正式收到文件時上傳文件完成被調用,而不是一分鐘前。所以我的另一個想法是,UploadProgressChanged是錯誤的。

任何人有任何想法?

回答

2

張貼之前應該看起來更深一些。

我覺得這很奇怪,上傳發生得這麼快。發生了什麼事是該應用程序說'上傳這個!'並且android正在說'ok!'..並且它認爲它已被上傳。但它只是與android排隊。

這裏有一個修復:

https://bugzilla.xamarin.com/show_bug.cgi?id=3100

基本上,從WebClient的繼承和超越getwebrequest,並設置AllowWriteStreamBuffering爲false。這是我的簡單代碼:

public class MyWebClient : WebClient 
{ 
    long contentLength; 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var req = base.GetWebRequest(address) as HttpWebRequest; 
     req.AllowWriteStreamBuffering = false; 
     req.ContentLength = contentLength; 
     return req; 
    } 

    public MyWebClient(long contentLength) 
    { 
     this.contentLength = contentLength; 
    } 
} 
+0

此修補程序也適用於其他平臺(例如Linux上的Mono)。 –