Подтвердить что ты не робот

Как создать экземпляр HttpPostedFileBase (или его унаследованный тип)

В настоящее время у меня есть byte[], который содержит все данные файла изображения, просто хочу создать экземпляр HttpPostedFileBase, чтобы я мог использовать существующий метод вместо создания нового перегруженного файла.

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
}
4b9b3361

Ответ 1

Создайте производный класс следующим образом:

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

Теперь вы можете передать экземпляр этого класса, где ожидается HttpPostedFileBase.

Ответ 2

Вы не можете вручную создать экземпляр HttpPostedFileBase или производных классов (HttpPostedFile). Этот класс должен быть создан только через фреймворк. Почему бы вам не избавиться от второго действия контроллера, которое принимает байтовый массив? Это не нужно. Связующее устройство по умолчанию будет работать отлично с тем, которое принимает HttpPostedFileBase.