使用monodroid上传大文件

时间:2012-08-25 06:32:06

标签: xamarin.android

我正在使用网络客户端通过 UploadFileAsync 方法上传相对大文件(40mb)。

当我在模拟器上测试时,连接速度非常快。我可以看到 UploadProgressChanged 经常被调用,并在大约20秒内达到100%。

然而, UploadFileCompleted 不会被另外 12分钟调用!!

如果我上传较小的文件(例如500kb),则只要上传进度达到100%,就会立即调用 UploadFileCompleted

我想知道这是否与线程有关?但我无法想象。

就Web服务器而言,它会在 UploadFileCompleted 被调用时正式接收文件,而不是一分钟之前。所以我的另一个想法是 UploadProgressChanged 是错误的。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在张贴之前应该看得更深一些。

我觉得上传发生得太快很奇怪。正在发生的事情是应用程序正在说'上传这个!'和android说'好!'..它认为它已被上传。但它只是与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;
    }
}