c# - studio - Cómo crear una instancia de HttpPostedFileBase(o su tipo heredado)
referencia a objeto no establecida como instancia de un objeto. c# array (2)
Crea una clase derivada de la siguiente manera:
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);
}
}
Ahora puede pasar una instancia de esta clase donde se espera HttpPostedFileBase.
Actualmente tengo un byte[]
que contiene todos los datos de un archivo de imagen, solo quiero construir una instancia de HttpPostedFileBase
para poder usar un método existente, en lugar de crear uno nuevo de sobrecarga.
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
}
No puede crear manualmente una instancia de HttpPostedFileBase
o clases derivadas ( HttpPostedFile
). Se supone que esta clase solo debe ser instanciada por el marco. ¿Por qué no te deshaces de la segunda acción del controlador que toma una matriz de bytes? No es necesario. La carpeta de modelo predeterminada funcionará bien con la que toma una HttpPostedFileBase
.