Barre de progression avec HttpClient
j'ai un fichier downloader fonction:
HttpClientHandler aHandler = new HttpClientHandler();
aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
HttpClient aClient = new HttpClient(aHandler);
aClient.DefaultRequestHeaders.ExpectContinue = false;
HttpResponseMessage response = await aClient.GetAsync(url);
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
//To save downloaded image to local storage
var imageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
filename, CreationCollisionOption.ReplaceExisting);
var fs = await imageFile.OpenAsync(FileAccessMode.ReadWrite);
DataWriter writer = new DataWriter(fs.GetOutputStreamAt(0));
writer.WriteBytes(await response.Content.ReadAsByteArrayAsync());
await writer.StoreAsync();
//current.image.SetSource(randomAccessStream);
writer.DetachStream();
await fs.FlushAsync();
Comment puis-je réaliser des progrès les fonctionnalités de la barre?
Peut-être que je peux obtenir les écrivains octets écrits jusqu'à présent? Ou quelque chose?
P. S. je ne peux pas utiliser DownloadOperation en arrière-plan(le transfert), car les données à partir de requêtes du serveur de certificats et cette fonctionnalité n'existe pas dans DownloadOperations.
Qu'en est
Est Windows.Web.Http.HttpClient disponible sur le bureau? Je pensais que c'était juste pour les applications du windows store. Qui je n'ai jamais vu personne utiliser dans la vie réelle.
Est Windows.Web.Http.HttpClient peut être utilisé dans ASP.Net?
Windows.Web.Http.HttpClient
. Que l'on soutient progrès.Est Windows.Web.Http.HttpClient disponible sur le bureau? Je pensais que c'était juste pour les applications du windows store. Qui je n'ai jamais vu personne utiliser dans la vie réelle.
Est Windows.Web.Http.HttpClient peut être utilisé dans ASP.Net?
OriginalL'auteur Cheese | 2013-12-18
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de le faire est d'utiliser
Windows.Web.Http.HttpClient
au lieu deSystem.Net.Http.HttpClient
. Le premier prend en charge les progrès.Mais si, pour une raison quelconque, vous voulez tenir à l'System.Net l'un, vous aurez besoin de mettre en place votre propre progrès.
Supprimer la
DataWriter
, retirez leInMemoryRandomAccessStream
et ajouterHttpCompletionOption.ResponseHeadersRead
àGetAsync
appel on en revient donc dès que les en-têtes sont reçues, et non pas lorsque l'ensemble de la réponse est reçue. I. e.:Pourquoi ne pas utiliser ProgressMessageHandler msdn.microsoft.com/en-us/library/... ?
est-il possible de suivre la progression comme ça pendant le Téléchargement de fichier via
HttpClient
PostAsync
methos..? parce que j'ai vu il n'y a pas de méthode dePostAsync
disponibles, qui prendHttpCompletionOption.ResponseHeadersRead
en paramètre..! Aider moi s'il vous plaît..Vous pouvez utiliser
PostAsync
avec unSystem.Net.Http.StreamContent
. L'initialisation de l'StreamContent
avec un flux de données mis en œuvre par vous, et vous pouvez obtenir une approximative télécharger les résultats de chaque Flux du temps.Read() est appelée dans votre parcours parce que vous connaissez la quantité de données a été lu.Vous devriez obtenir le nombre total d'octets en se regardant dans le
Content-Length
tête dans la réponse. I. e.:response.Content.Headers.ContentLength
OriginalL'auteur kiewic
Voici une classe qui va faire le téléchargement, et de faire rapport sur les progrès de pourcentage, basé sur le code de TheBlueSky sur cette SORTE de réponse, et eriksendc sur cette GitHub commentaire.
Utilisation:
Résultat:
Dû supprimer les éléments suivants pour obtenir des progrès de mise à jour: si (readCount % 100 == 0)
OriginalL'auteur René Sackers
.Net 4.5 à partir de: Utiliser
IProgress<T>
Depuis .Net 4.5, vous pouvez gérer asynchronus rapports sur les progrès réalisés avec la
IProgress<T>
interface. Vous pouvez écrire une méthode d'extension pour le téléchargement de fichiers à l'aide de laHttpClient
qui peut être appelé comme ça oùprogress
est la mise en œuvre deIProgress<float>
pour votre porgress bar ou d'autres trucs de l'INTERFACE utilisateur:Mise en œuvre
Le code de cette méthode d'extension qui ressemble à ça. Notez que cette extension dépend d'une autre extension pour le traitement asynchrone copie de flux avec des rapports sur les progrès réalisés.
Avec le ruisseau de l'extension pour les vrais rapports sur les progrès réalisés:
Créer le
HttpClient
à l'aide d'unHttpClientHandler
avec certificat correct options, comme vous l'avez fait dans votre questionOriginalL'auteur Bruno Zell
Le code suivant montre un exemple minimal de ce qui doit être fait contre la
HttpClient
api pour obtenir la progression du téléchargement.Le ci-dessus ne vous dit pas comment traiter le flux, la manière de présenter les processus, ou d'essayer de fournir une solution directe pour le code dans la question d'origine. Cependant, cette réponse peut être plus accessible pour les futurs lecteurs qui souhaitent demander la avoir des progrès dans leur code.
OriginalL'auteur vossad01
même que @René Sackers solution ci-dessus, mais a ajouté la possibilité d'annuler le téléchargement
OriginalL'auteur Balage
Hm, vous pourriez avoir un autre thread vérifier la taille actuelle du flux de l'écrit (vous pouvez également passer les attendus de la taille du fichier) et ensuite mettre à jour la barre de progression en conséquence.
Malheureusement je ne possède pas un Win8 copie, donc je ne peux pas tester votre fonction. Pourtant, si vous voulez faire les choses plutôt simples, vous pouvez faire le nom de fichier et la taille du fichier mondial, ont un fond travailleur avec une boucle et un fil de sommeil de vérifier la taille du fichier, sur une base régulière, et de mettre à jour la barre de progression. C'est, cependant, pas une solution élégante.
Je pense que cela ne marchera pas. Rien n'est écrit dans le flux jusqu'à
ReadAsByteArrayAsync
retourne.OriginalL'auteur Rodrigo Silva