Eccezione Fusioni non valido nel HttpFileCollection
-
19-09-2019 - |
Domanda
Ho un metodo di estensione in basso, ma quando ho eseguito questo, il foreach mi dà InvalidCastException
e si dice *
Impossibile eseguire il cast oggetto di tipo 'System.String' di digitare 'System.Web.HttpPostedFile'.
Codice:
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;
}
Grazie in anticipo.
MSDN dice:
Clienti codificare i file e le trasmettono nel contenuto del corpo utilizzando multipart formato MIME con una HTTP Content-Type intestazione di multipart / form-data. ASP.NET estrae il file codificato (s) dal corpo contenuto in singoli membri di un HttpFileCollection. metodi e proprietà della classe HttpPostedFile fornire l'accesso ai contenuti e le proprietà di ogni file.
Soluzione
Se si guarda il codice di esempio in questa pagina, mostra come si dovrebbe enumerare la raccolta, si sono infatti ottenere una stringa quando si tenta di enumerare come sei.
http://msdn.microsoft.com/en- us / library / system.web.httpfilecollection.aspx
Altri suggerimenti
Il HttpFileCollection
enumerator raccolta torna chiavi. È necessario utilizzare la chiave in ogni iterazione del ciclo per cercare la associato oggetto HttpPostedFile
. Così il ciclo ha bisogno di guardare in questo modo:
foreach (string name in collection) {
HttpPostedFile _file = collection[name];
// ...rest of your loop code...
}
Bene, io ho trovato una soluzione ma sembra così stupido ma funziona.
Ho semplicemente cambiato il foreach
con questo:
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;
}
}