Frage

Ich habe eine Erweiterungsmethode unten, aber wenn ich diese laufen, gibt die foreach mich InvalidCastException und es sagt *

  

Kann nicht Gussobjekt des Typs   'System.String' type   '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;
        }

Vielen Dank im Voraus.

MSDN sagt:

  

kodieren Clients Dateien und übertragen sie   in dem Inhaltskörper unter Verwendung mehrteiliger   MIME-Format mit einem HTTP-Content-Type   Header von multipart / form-data. ASP.NET   Extrakte der kodierten Datei (en) aus der   Inhaltskörper in einzelne Mitglieder   ein HttpFileCollection. Methoden und   Eigenschaften der Klasse HttpPostedFile   Zugang zu den Inhalten und   Eigenschaften jeder Datei.

War es hilfreich?

Lösung

Wenn Sie auf dieser Seite im Codebeispiel sehen, es zeigt, wie Sie die Sammlung aufzählen sollte, Sie sind in der Tat eine Reihe bekommen, wenn Sie versuchen, aufzuzählen, wie Sie sind.

http://msdn.microsoft.com/en- us / library / system.web.httpfilecollection.aspx

Andere Tipps

Die HttpFileCollection Sammlung Enumerator zurück Tasten. Sie müssen die Schlüssel in jeder Iteration der Schleife verwenden, um den zugehörigen HttpPostedFile Objekt. So Ihre Schleife Bedürfnisse wie folgt aussehen:

foreach (string name in collection) {
    HttpPostedFile _file = collection[name];
    // ...rest of your loop code...
}

Nun, ich habe eine Lösung gefunden, aber es sieht so dumm, aber es funktioniert.

Ich habe einfach die foreach mit dieser Änderung:

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;
    }
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top