Member 13343508 Ответов: 2

Как отфильтровать формат файлов при отправке электронной почты с помощью C#


Привет, я пытаюсь загрузить только PDF-формат на сервер,но все файлы загружаются, любое предложение.

Что я уже пробовал:

мой код:

public ActionResult FileUpload(IEnumerable<httppostedfilebase & gt; files)
{
foreach (HttpPostedFileBase file in files)
{
если (файл != нуль усилителя; amp; файл&усилителя;.ContentLength > 0)
пробовать
{
string path = путь.Комбайн (Сервер.MapPath ("~/MyFiles"),
Путь.GetFileName(файл.имя файла));
файл.SaveAs(путь);
}
поймать (исключение бывший)
{
Видовая сумка.Сообщение = "Ошибка:" + ex. сообщение.Метод toString();
}
еще
{
Видовая сумка.Сообщение = "вы не указали файл.";
}
}
return Redirect ("индекс");
}

		    
                    

2 Ответов

Рейтинг:
7

Zahid Mughal

попробовать это:

public ActionResult FileUpload(IEnumerable<HttpPostedFileBase> files)
        {
          if(file.FileName.Contains(".pdf")){

            foreach (HttpPostedFileBase file in files)
            {
                if (file != null && file.ContentLength > 0)
                    try
                    {
                        string path = Path.Combine(Server.MapPath("~/MyFiles"),
                                                   Path.GetFileName(file.FileName));
                        file.SaveAs(path);
                    }
                    catch (Exception ex)
                    {
                        ViewBag.Message = "ERROR:" + ex.Message.ToString();
                    }
                else
                {
                    ViewBag.Message = "You have not specified a file.";
                }
            }
         }
            return Redirect("index");
        }


Member 13343508

Да, он работает отлично. Спасибо

Richard Deeming

Я вижу, что вы пытаетесь сделать, но код, который вы опубликовали, даже не компилируется!

Вы не можете ссылаться на переменную цикла file из-за пределов петли. Этот тест должен быть внутри цикла, в сочетании с существующим if условия.

И нет смысла проверять, есть ли файл. содержит строка". pdf"; тривиально загрузить файл под названием MyVirus.pdf.exe который пройдет это испытание. Вам нужно проверить, есть ли файл вместо этого он заканчивается на". pdf".

Рейтинг:
2

Thomas Daniels

Если вы знаете, что PDF-файлы будут иметь расширение. pdf, вы можете проверить это.

string extension = Path.GetExtension(file.FileName);
if (string.Equals(extension, ".pdf", StringComparison.OrdinalIgnoreCase))
{
    // it is a PDF
}
Если этого недостаточно, прочтите содержимое файла и определите, может ли он быть PDF-файлом: c# - определить, является ли байт[] pdf-файлом-переполнение стека[^]


Richard Deeming

Это обычно лучше, чтобы пройти StringComparison опцион на string.Equals метод, а не изменение регистра строки:

if (string.Equals(extension, ".pdf", StringComparison.OrdinalIgnoreCase))

Thomas Daniels

Верно, упустил это из виду. Спасибо, что указали на это, я отредактировал ответ.