j'ai le code suivant:Comment savoir si Image.FromStream est complète
var request = (HttpWebRequest)HttpWebRequest.Create(url);
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null) {
Image newImage = Image.FromStream(stream, true);
pic.Thumb = newImage.ImageToByteArray();
}
Qu'advient-il si les temps de lecture sur? Ou la connexion est interrompue à mi-téléchargement?
Les docs disent qu'il va lancer un ArgumentException
si ce n'est pas un format valide ou est nul, mais je ne sais pas s'il va lancer cette exception si l'image n'est que partiellement téléchargée.
Malheureusement, je ne peux pas compter sur l'en-tête de ContentLength pour me dire la bonne taille du fichier, car le serveur est et donne une longueur de contenu plus grand que le fichier est en réalité. Donc mon espoir est que Image.FromStream sera capable de dire si l'image est complète ou non.
Quelqu'un peut-il donner un aperçu ici?
Note: ImageToByteArray est juste une méthode d'extension qui utilise un flux de mémoire pour convertir le Image
à un byte[]
MISE À JOUR:
Selon Darin, puis un ExternalException est jeté lorsque vous essayez d'enregistrer l'image . Cependant, mes propres tests dans lesquels j'ai tronqué un fichier image montrent que FromStream
lance en fait une ArgumentException si l'image n'est pas le bon nombre d'octets.
Bien, cela a du sens. Que se passe-t-il si le serveur n'envoie tout simplement pas une image complète? (Disons qu'ils ont des problèmes de charge et d'obtenir les délais d'attente dans leur back-end, et envoyer simplement une image partielle, mais sinon la connexion est normal) –
@Mystere Man, je ne comprends pas. Vous voulez dire que le serveur envoie un tableau d'octets qui est une image invalide, comme la ressource distante hébergeant une image corrompue? Si oui, alors vous obtiendrez une exception ArgumentException lorsque vous essayez de charger ce flux dans l'objet Image GDI + (méthode Image.FromStream). –
Je veux dire, je ne sais pas si la classe Image va détecter une image partielle comme invalide ou non et lancer l'ArgumentException. –