Alex Rivera | Logout

How to create an instance of HttpPostedFileBase(or its inherited type)

Asked 2011-09-19T05:10:02.587
30

Currently I have a byte[] that contains all the data of an image file, just want to build an instance of HttpPostedFileBase so that I can use an existing method, instead of creating a new overload one.

public ActionResult Save(HttpPostedFileBase file)

public ActionResult Save(byte[] data)
{
    //Hope I can construct an instance of HttpPostedFileBase here and then
    return Save(file);

    //instead of writing a lot of similar codes
}
Edit
Report

1 Answer

54

Create a derived class as follows:

class MemoryFile : HttpPostedFileBase
{
Stream stream;
string contentType;
string fileName;

public MemoryFile(Stream stream, string contentType, string fileName)
{
    this.stream = stream;
    this.contentType = contentType;
    this.fileName = fileName;
}

public override int ContentLength
{
    get { return (int)stream.Length; }
}

public override string ContentType
{
    get { return contentType; }
}

public override string FileName
{
    get { return fileName; }
}

public override Stream InputStream
{
    get { return stream; }
}

public override void SaveAs(string filename)
{
    using (var file = File.Open(filename, FileMode.CreateNew))
        stream.CopyTo(file);
}
}

Now you can pass instance of this class where HttpPostedFileBase is expected.

answered 2011-09-19T05:40:54.373

Your Answer