Как разместить файл в переменную (с типом "HttpPostedFileBase") в контроллере

У меня есть переменная с HttpPostedFileBase как тип в моей модели. Модель приведена ниже:

    public class MailModel
    {
        public int mail_id { get; set; }
        public string From { get; set; }
        public string To { get; set; }
        public string subject { get; set; }
        public string Content { get; set; }
        public HttpPostedFileBase file { get; set; }

    }

Теперь я хочу присвоить значение переменной file из моего локального пути к файлу. Как я могу присвоить значение file в соответствующем контроллере?

    public class MailController : Controller
    {
       MailModel mm = new MailModel();
       mm.file = ?            //Can I add a filepath?
    }

Спасибо!

1 ответ

Решение

Наконец-то я получил решение. Я преобразовал путь к файлу в байтах, используя следующий код:

    byte[] bytes = System.IO.File.ReadAllBytes(FilePath);

Я создал производный класс для HttpPostedFileBase в MailModel,

    public class MemoryPostedFile : HttpPostedFileBase
    {
        private readonly byte[] FileBytes;
        private string FilePath;

        public MemoryPostedFile(byte[] fileBytes, string path, string fileName = null)
        {
            this.FilePath = path;
            this.FileBytes = fileBytes;
            this._FileName = fileName;
            this._Stream = new MemoryStream(fileBytes);
        }

        public override int ContentLength { get { return FileBytes.Length; } }
        public override String FileName { get { return _FileName; } }
        private String _FileName;
        public override Stream InputStream
        {
            get
            {
                if (_Stream == null)
                {
                    _Stream = new FileStream(_FileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                }
                return _Stream;
            }
        }
        private Stream _Stream;
        public override void SaveAs(string filename)
        {
            System.IO.File.WriteAllBytes(filename, System.IO.File.ReadAllBytes(FilePath)); 
        }
    }

Затем я вызываю его из MailController, используя следующий код:

public class MailController: Controller
{
   byte[] bytes = System.IO.File.ReadAllBytes(FilePath);
   MailModel model= new MailModel();
   model.file = (HttpPostedFileBase)new MemoryPostedFile(bytes, FilePath, filename);
}

Теперь я могу присвоить значение переменной "file" (с типом HttpPostedFileBase)

Другие вопросы по тегам