Comment obtenir la taille du fichier d'en-têtes http
Je veux obtenir la taille d'un http:/.../file avant je le télécharge. Le fichier peut être une page web, une image ou un fichier multimédia. Cela peut être fait avec des en-têtes HTTP? Comment puis-je télécharger le fichier d'en-tête HTTP?
Vous devez vous connecter pour publier un commentaire.
Oui, en supposant que le serveur HTTP qui vous parlez à des services de soutien permet cela:
Si à l'aide de la TÊTE de méthode n'est pas autorisée, ou la Longueur du Contenu de l'en-tête n'est pas présent dans la réponse du serveur, la seule façon de déterminer la taille du contenu sur le serveur est de le télécharger. Car ce n'est pas particulièrement fiable, la plupart des serveurs d'inclure cette information.
using
automatiquement l'envoie. msdn.microsoft.com/en-us/library/yh598w02(v=vs. 110).aspxint
n'est pas assez, vous aurez besoin d'utiliserlong ContentLength;
etlong.TryParse(xxx)
pour plus d'un 2.14 GB taille de la valeur de retour.Oui, c'est le chemin à parcourir. Si l'information est fournie, il est dans l'en-tête comme le
Content-Length
. Notez, cependant, que ce n'est pas nécessairement le cas.Téléchargement uniquement l'en-tête peut être fait en utilisant un
HEAD
demande au lieu deGET
. Peut-être le code suivant permet de:Avis de la propriété pour la longueur du contenu sur le
HttpWebResponse
objet – pas besoin d'analyser leContent-Length
en-tête manuellement.resp.ContentLength
au-dessus de vous donner la longueur de la TÊTE à la réponse, et non pas la longueur du fichier que vous étiez intéressé à avoir de la sizeof ?Using
bloc ici, ou de mettre en œuvre le modèle jetable pour gérer la durée de vie de la ressource de manière explicite. Manuellement appelerClose
n'est pas suffisante, sauf si vous assurer que toujours qui se passe, même dans le cas de l'erreur.ContentLength
renvoie unelong
. Pas une grosse affaire, mais juste au cas où vous voulez le fixer.Noter que chaque serveur accepte
HTTP HEAD
demandes. Une approche alternative pour obtenir la taille du fichier est de faire uneHTTP GET
appel au serveur qui demande seulement une partie du fichier de garder la réponse de la petite et de récupérer la taille du fichier de métadonnées qui est retourné dans le cadre de la réponse de l'en-tête de contenu.La norme
System.Net.Http.HttpClient
peut être utilisé pour cela. Le contenu partiel est demandé par la définition d'une plage d'octets sur la demande d'en-tête de message comme:Le serveur répond avec un message contenant la demande de gamme ainsi que l'ensemble de la taille du fichier. Cette information est retourné dans la réponse du contenu de l'en-tête (
response.Content.Header
) avec la clé "Content-Range".Voici un exemple de contenu de gamme dans le message de réponse de contenu d'en-tête:
Dans cet exemple, la valeur d'en-tête implique la réponse contient les octets 0 à 15 (soit 16 octets au total) et le fichier est 2,328,372 octets dans son intégralité.
Voici un exemple de mise en œuvre de cette méthode: