0

Windows Phone 8 デバイスから SkyDrive に大きなファイルをアップロードしようとしています。OurOfMemory 例外を回避するために、ファイル バイトを手動で (SDK なしで) 書き込み、AllowWriteStreamBuffering = false でストリームを要求する必要があります。

var putUrl = string.Format("https://apis.live.net/v5.0/{0}/files/{1}?suppress_response_codes=true&suppress_redirects=true&overwrite=true&access_token={2}", _folderId, fileName, _session.AccessToken);
var webRequest = (HttpWebRequest) WebRequest.Create(putUrl);
webRequest.ContentType = string.Empty;//Empty is required for PUT method.
webRequest.Method = "PUT";
webRequest.AllowWriteStreamBuffering = false;
webRequest.ContentLength = fileStream.Length;
webRequest.BeginGetRequestStream(iar =>
{
    using (var requestStream = webRequest.EndGetRequestStream(iar))
    {
        var buffer = new byte[1024*100];
        var read = 0;
        while ((read = fileStream.Read(buffer, 0, buffer.Length)) <= buffer.Length)
        {
            requestStream.Write(buffer, 0, read); //!!!IT HANGS HERE WITHOUT ANY ERROR!!!
            if (read < buffer.Length)
                break;
        }
    }
}, webRequest);

小規模および中規模のファイル (<50MB) では問題なく動作しますが、アップロードは requestStream.Write でハングし (さまざまな割合で、30% の場合もあれば 50% の場合もあります)、大きなファイル (100-500 MB) の実行を続行しません。

助けていただければ幸いです。

ありがとう、アレクセイ・ストラフ

4

0 に答える 0