7

次のコードを使用して、URLから画像をダウンロードしています

HttpClient client = new HttpClient();
        var stream = await client.GetStreamAsync(new Uri("<your url>"));
        var file = await KnownFolders.PictureLibrary.CreateFileAsync("myfile.png");
        using (var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            using (stream)
                await stream.CopyToAsync(targetStream.AsStreamForWrite());
        }

何人かのユーザーは、常にイメージ全体をダウンロードするとは限らないと報告しています。彼らは時々部分的な画像を取得し、残りはただのゴミです.

これには何か理由がありますか?ありがとう!

4

3 に答える 3

7

DownloadDataまたはDownloadDataAsyncメソッドを使用してWebClientクラスを試すことをお勧めします。

File.WriteAllBytes("myfile.png",
    new WebClient().DownloadData("<your url>"));

編集ストリームで問題が発生する場合は、代わりにバイト配列応答を使用できます。内部に非同期コードを含む「using」ステートメントが原因で、早期に破棄されている可能性がありますか?

var httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync(new Uri("<Your URI>"));
var file = await KnownFolders.PictureLibrary.CreateFileAsync("myfile.png");
var targetStream = await file.OpenAsync(FileAccessMode.ReadWrite)
await targetStream.AsStreamForWrite().WriteAsync(data, 0, data.Length);
targetStream.FlushAsync().Wait();
targetStream.Close();
于 2013-03-11T14:55:19.857 に答える
1

HttpClient を使用している場合、画像が 64K を超えるとエラーになります。httpClient.MaxResponseContentBufferSize をより大きな値に設定する必要があります。

max-buffer-size を 256K に設定した MSDN クイック スタートを参照してください。 http://msdn.microsoft.com/en-us/library/windows/apps/xaml/JJ152726(v=win.10).aspx

個人的には、BackgroundDownloader を使用します。

于 2013-05-06T21:38:09.440 に答える