Использование элемента управления FileUpload ASP.NET и определить, если файл PDF/Word/Excel пуст

Я исследовал и проходил stackoverflow в течение нескольких часов. Есть некоторые решения, но они не работают во всех ситуациях. Позвольте мне сначала объяснить свою проблему.

Моя проблема заключается в том, что я пытаюсь загрузить файл, и файл может быть любым из следующих вариантов

  1. документ pdf
  2. доктор
  3. docx
  4. xls
  5. xlsx

Люди в основном предложили использовать следующий подход

 if (FileUpload.FileContent.Length == 0)

Я попробовал этот подход на пустом файле docx, который является более новым форматом Microsoft Word. Удивительно, но это не удалось. Когда я отладил код, я действительно видел, что в файле было содержимое, и когда я отредактировал его в блокноте, это оказалось правдой. Похожий случай с форматом 97-2003 который doc и также с более новым форматом excel который xlsx и старый формат 97-2003 который xls.

Кажется очень очевидным, что проверка длины контента не будет работать. Я не работал о pdf, но его весьма вероятно, похожий случай с pdf, а также. Он может иметь свои собственные данные.

Теперь большой вопрос заключается в том, как мы проверяем, имеет ли файл фактическое содержание или нет.

Обратите внимание, что пользователь может попытаться загрузить файл, который может содержать содержимое, но это содержимое может быть не более чем пробел. Рассмотрим пробел, вкладку, возврат каретки или новые строки. По сути, файл с пробелами по-прежнему является пустым/пустым файлом. Так что нужно проверить, что, а также

2 ответа

  1. Не совсем уверен, как пересечь ссылки на SA к конкретному сообщению, но я нашел это:

    string file = "file.csv";
    var fi = new FileInfo(file);
    if (fi.Length == 0 || 
        (fi.Length < 100000 
         && !File.ReadAllLines(file)
            .Where(l => !String.IsNullOrEmpty(l.Trim())).Any()))
    {
        //empty file
    }
    

    здесь:

    Является ли файл пустой проверка

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

  2. Вы можете попробовать использовать jQuery, как здесь:

    Asp.Net проверьте размер файла перед загрузкой

    ASPX

    <asp:CustomValidator ID="customValidatorUpload" runat="server" ErrorMessage="" ControlToValidate="fileUpload" ClientValidationFunction="setUploadButtonState();" />
    <asp:Button ID="button_fileUpload" runat="server" Text="Upload File" OnClick="button_fileUpload_Click" Enabled="false" />
    <asp:Label ID="lbl_uploadMessage" runat="server" Text="" />
    

    jQuery

    function setUploadButtonState() {
    
       var maxFileSize = 4194304; // 4MB -> 4 * 1024 * 1024
       var fileUpload = $('#fileUpload');
    
       if (fileUpload.val() == '') {
        return false;
       }
       else {
          if (fileUpload[0].files[0].size < maxFileSize) {
             $('#button_fileUpload').prop('disabled', false);
             return true;
          }else{
             $('#lbl_uploadMessage').text('File too big !')
             return false;
          }
       }
    }