2009-08-12 8 views
0

J'ai une application qui permet aux utilisateurs de télécharger des documents Word et PDF. J'ai aussi une classe dans mon modèle qui rassemble des métadonnées sur le fichier (c'est-à-dire, la taille du fichier, le type de contenu, etc.).Pass HttpPostedFileBase comme argument

Je souhaite centraliser certaines des fonctionnalités de sauvegarde (à la fois l'enregistrement des métadonnées dans la base de données et l'enregistrement du fichier sur le serveur). Je voudrais passer le HttpPostedFileBase à ma couche de service qui utilisera alors la fonctionnalité intégrée .SaveAs (nom de fichier). Cependant, je n'arrive pas à comprendre comment passer le type de fichier à une autre méthode. Je l'ai essayé le ci-dessous:

public ActionResult Index(HttpPostedFileBase uploadedDocument) 
{ 
    string fileName = "asdfasdf"; 

    SomeClass foo = new SomeClass(); 

    //this works fine 
    uploadedDocument.SaveAs(fileName) 

    //this does not work 
    foo.Save(uploadedDocument, fileName); 
} 

public class SomeClass 
{ 
    public void Save(HttpPostedFile file, string fileName) 
    { 
     //database save 
     file.SaveAs(fileName); 
    } 
} 

Lorsque je tente de passer le HttpPostedFile dans la méthode Save sur SomeClass, il y a une erreur de compilation (parce que dans ce qui précède, uploadedDocument est de type HttpPostedFileBase, non HttpPostedFile). Cependant, si j'essaie de publier uploadDocument sur HttpPostedFile, cela ne fonctionne pas. Donc, spécifiquement, comment puis-je passer un HttpPostedFileBase à une autre méthode? Ou, plus généralement, si je devais passer le HttpPostedFileBase.InputStream à une autre méthode, comment puis-je sauvegarder ce document sur le serveur? Notez que le document n'est pas une image et que je ne diffuse pas la réponse à l'utilisateur, écrire dans le flux de réponse n'est donc pas approprié ... Je pense.

Répondre

Questions connexes