Exception Cast non valide dans HttpFileCollection
-
19-09-2019 - |
Question
J'ai une méthode d'extension ci-dessous, mais quand je lance cela, le foreach me donne InvalidCastException
et il dit *
Impossible de coulée objet de type « System.String » taper 'System.Web.HttpPostedFile'.
Code:
public static List<Attachment> GetFiles(this HttpFileCollection collection) {
if (collection.Count > 0) {
List<Attachment> items = new List<Attachment>();
foreach (HttpPostedFile _file in collection) {
if (_file.ContentLength > 0)
items.Add(new Attachment()
{
ContentType = _file.ContentType,
Name = _file.FileName.LastIndexOf('\\') > 0 ? _file.FileName.Substring(_file.FileName.LastIndexOf('\\') + 1) : _file.FileName,
Size = _file.ContentLength / 1024,
FileContent = new Binary(new BinaryReader(_file.InputStream).ReadBytes((int)_file.InputStream.Length))
});
else
continue;
}
return items;
} else
return null;
}
Merci d'avance.
MSDN dit:
Les clients encodent les fichiers et les transmettent dans le corps du contenu en utilisant multipartie format MIME avec un type de contenu HTTP en-tête de multipart / form-data. ASP.NET extrait le fichier codé (s) à partir du corps contenu dans des éléments individuels d'un HttpFileCollection. méthodes et propriétés de la classe HttpPostedFile fournir un accès au contenu et propriétés de chaque fichier.
La solution
Si vous regardez l'exemple de code sur cette page, il montre comment vous devez énumérer la collection, vous êtes en fait obtenir une chaîne lorsque vous essayez d'énumérer comme vous êtes.
http://msdn.microsoft.com/en- nous / bibliothèque / system.web.httpfilecollection.aspx
Autres conseils
Le HttpFileCollection
recenseur de collecte retourne clés. Vous devez utiliser la clé à chaque itération de la boucle pour rechercher l'associé l'objet de HttpPostedFile
. Ainsi, votre boucle doit ressembler à ceci:
foreach (string name in collection) {
HttpPostedFile _file = collection[name];
// ...rest of your loop code...
}
Eh bien, je l'ai trouvé une solution, mais il a l'air si stupide mais ça fonctionne.
J'ai simplement changé le foreach
avec celui-ci:
foreach (string fileString in collection.AllKeys) {
HttpPostedFile _file = collection[fileString];
if (_file.ContentLength > 0)
items.Add(new Attachment()
{
ContentType = _file.ContentType,
Name = _file.FileName.LastIndexOf('\\') > 0 ? _file.FileName.Substring(_file.FileName.LastIndexOf('\\') + 1) : _file.FileName,
Size = _file.ContentLength / 1024,
FileContent = new Binary(new BinaryReader(_file.InputStream).ReadBytes((int)_file.InputStream.Length))
});
else
continue;
}
HttpFileCollection hfc = Request.Files;
for (int i = 0; i < hfc.Count; i++)
{
HttpPostedFile hpf = hfc[i];
if (hpf.ContentLength > 0)
{
string _fileSavePath = _DocPhysicalPath + "_" + hpf.FileName;
}
}