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.

È stato utile?

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;
    }
  }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top