我有一个允许用户上传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传递给另一个方法,我该如何将该文档保存到服务器?请注意,该文档不是图像,我没有将响应流式传输给用户,因此写入响应流是不合适的......我认为。
答案 0 :(得分:4)
您应该使用HttpPostedFileBase
,例如在SomeClass.Save方法中。 HttpPostedFile
类实际上并不是从HttpPostedFileBase
派生的,因此您必须得到您注意到的编译器错误。您可能还会看到用于反向方案的HttPostedFileWrapper
文档:将HttpPostedFile
传递给接受HttpPostedFileBase
的方法。