2010-10-13 15 views
2

Je me demande comment vérifier la quantité d'un fichier téléchargé/téléchargé? J'utilise HttpWebRequestComment puis-je vérifier la progression d'un téléchargement HttpWebRequest?

+0

Alors ne faites-vous pas * également * la gestion du tampon lors de l'écriture/lecture dans les flux d'entrée/sortie de 'HttpWebRequest'? En mettant en mémoire tampon, vous avez une itération naturelle avec laquelle incrémenter le progrès. –

+0

Je me trompe peut-être, mais tout ce buffering sera du côté du client, n'est-ce pas? pas de données que j'envoie réellement. ou avez-vous du code ou des liens pour que je puisse voir ce que vous voulez dire? btw mon code actuel ressemble quelque chose comme http://codepad.org/gK16e0NU –

+0

duplication possible de [téléchargement de fichier Silverlight 4 RC avec l'avancement du téléchargement: comment?] (http://stackoverflow.com/questions/2529558/silverlight-4 -rc-fichier-upload-avec-upload-progress-how-to) –

Répondre

3

Vous pouvez le faire est que vous utilisez le mode asynchrone sur le HttpWebRequest - il y a un échantillon de travail (basé sur l'exemple de code doc MSDN) here. Brève description:

Voici un petit Win Forms client qui vous permet de télécharger un seul fichier à partir d'un serveur, via HTTP ou FTP . Il affiche la progression du téléchargement et affiche le taux de transfert moyen, en kb/sec. Il montre également comment utiliser les classes HttpWebRequest et FtpWebRequest dans System.Net pour faire des téléchargements de fichiers.

-2

Vous devez l'appeler de manière asynchrone pour mettre à jour la progression de votre téléchargement.

HttpWebRequest ont des méthodes telles que

public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state); 
public override IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state); 

accepter callbacks asynchrones.

+0

downvote? pourquoi??? – RameshVel

+1

Merci, mais pouvez-vous élaborer sur comment vous feriez cela. –

+2

Le rappel est pour lorsque la demande est terminée. il n'y a pas de progrès via le rappel (autre que 100% - ce qui est probablement * pas * pourquoi le PO a posé la question). cela pourrait expliquer la downvote –

-1

Tant que vous définissez soit HttpWebRequest.ContentLength ou HttpWebRequest.SendChunked avant d'appeler GetRequestStream, les données que vous envoyez seront envoyées au serveur avec chaque appel à flux. [Begin] écrire. Si vous écrivez le fichier en petits morceaux suggère, vous pouvez avoir une idée de la distance qui vous longe.

+0

En fait, le client met les données en tampon même lorsque vous définissez SendChunked. J'ai essayé ceci avec un fichier de 18M et tout a envoyé dans quelques secondes, alors la transmission réelle a pris des minutes. – Charles