ASP.NET, C #, IIS, MIME TYPES, ЗАГРУЗКА ФАЙЛА, УСЛОВНАЯ - PullRequest
7 голосов
/ 12 сентября 2011

У меня есть веб-форма для загрузки файлов, и она должна принимать только определенные форматы (или типы MIME) ...

Следующий код работает ОТЛИЧНО, КРОМЕ, он не загружает файлы .DOCX на сервер! Это единственный тип файлов, который не работает ... Я дважды проверил каждую строку кода и даже попал в диспетчер IIS, чтобы убедиться, что типы .DOCX MIME были унаследованы, и они были ...

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

Фрагмент кода:

string savePath = "D:\\HIDDEN PATH HERE";
string fileMsg;

// Before attempting to perform operations
// on the file, verify that the FileUpload 
// control contains a file.
if (FileUpload1.HasFile)
{
    // Check to see that the content type is proper and allowed.
    // DOC: application/doc, appl/text, application/vnd.msword, application/vnd.ms-word, application/winword, application/word, application/x-msw6, application/x-msword
    if (
        FileUpload1.PostedFile.ContentType == "text/rtf" ||
        FileUpload1.PostedFile.ContentType == "application/doc" ||
        FileUpload1.PostedFile.ContentType == "appl/text" ||
        FileUpload1.PostedFile.ContentType == "application/vnd.msword" ||
        FileUpload1.PostedFile.ContentType == "application/vnd.ms-word" ||
        FileUpload1.PostedFile.ContentType == "application/winword" ||
        FileUpload1.PostedFile.ContentType == "application/word" ||
        FileUpload1.PostedFile.ContentType == "application/msword" ||       
        FileUpload1.PostedFile.ContentType == "application/x-msw6" ||
        FileUpload1.PostedFile.ContentType == "application/x-msword" ||
        FileUpload1.PostedFile.ContentType == "application/pdf" ||
                        FileUpload1.PostedFile.ContentType == "application/x-pdf" ||
        FileUpload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
        FileUpload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.template"
        )
    {
        // Get the name of the file to upload.
        String fileName = FileUpload1.FileName;

        // Append the name of the file to upload to the path.
        savePath += strnow + fileName;


        // Call the SaveAs method to save the 
        // uploaded file to the specified path.
        // This example does not perform all
        // the necessary error checking.               
        // If a file with the same name
        // already exists in the specified path,  
        // the uploaded file overwrites it.
        FileUpload1.SaveAs(savePath);

        // Notify the user of the name of the file
        // was saved under.
        //fileMsg = "Your file was saved as " + fileName;
        fileMsg = "";
    }
    else
    {
        fileMsg = "Your file was not an accepted format. Please use PDF, RTF or DOC formats."; 
    }

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

См. этот ответ , который указывает на эту страницу .

DOCX MIME Тип:

application/vnd.openxmlformats-officedocument.wordprocessingml.document

EDIT: Извините, не увидел его в списке. Если вы хотите разрешить DOCX, почему бы просто не проверить ".docx" как расширение.

|| FileUpload1.PostedFile.FileName.ToLower().Substring(FileUpload1.PostedFile.FileName.Length - 4) == "docx"
1 голос
/ 31 мая 2012

Вы должны читать расширение, а не проверять типы пантомимы. Типы MIME устанавливаются браузером и могут отличаться на разных компьютерах. Это не их цель.

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

string[] acceptedExtensions = new string[] { ".docx", ".doc", ".txt", ".etc" };
// snip


if(acceptedExtensions.Contains(Path.GetExtension(FileUpload1.PostedFile.Filename))) 
{ 
    AcceptFile(FileUpload1.PostedFile);
}
...