将HttpPostedFileBase作为参数传递

时间:2009-08-12 04:20:23

标签: asp.net-mvc

我有一个允许用户上传word和pdf文档的应用程序。我的模型中还有一个类,它收集有关文件的一些元数据(即文件大小,内容类型等)。

我想集中一些“保存”功能(将元数据保存到数据库,并将实际文件保存到服务器)。我想将HttpPostedFileBase传递给我的Service层,然后使用内置的.SaveAs(filename)功能。但是,我似乎无法弄清楚如何将文件类型传递给另一个方法。我试过以下内容:

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);
    }
}

当我尝试将HttpPostedFile传递给SomeClass上的Save方法时,会出现编译错误(因为在上面,uploadedDocument的类型为HttpPostedFileBase,而不是HttpPostedFile)。

但是,如果我尝试将uploadedDocument强制转换为HttpPostedFile,则无效。

因此,具体来说,我如何将HttpPostedFileBase传递给另一个方法?或者,更一般地说,如果我将HttpPostedFileBase.InputStream传递给另一个方法,我该如何将该文档保存到服务器?请注意,该文档不是图像,我没有将响应流式传输给用户,因此写入响应流是不合适的......我认为。

1 个答案:

答案 0 :(得分:4)

您应该使用HttpPostedFileBase,例如在SomeClass.Save方法中。 HttpPostedFile类实际上并不是从HttpPostedFileBase派生的,因此您必须得到您注意到的编译器错误。您可能还会看到用于反向方案的HttPostedFileWrapper文档:将HttpPostedFile传递给接受HttpPostedFileBase的方法。