7 Stimmen

ASP.NET, C#, IIS, MIME TYPES, DATEI HOCHLADEN BEDINGT

Ich habe ein Webformular zum Hochladen von Dateien auf der Website und es muss nur bestimmte Formate (oder MIME-Typen) akzeptieren...

Der folgende Code funktioniert PERFEKT, AUSSER, er lädt keine DOCX-Dateien auf den Server hoch! Das ist der einzige Dateityp, der nicht funktioniert... Ich habe jede Code-Zeile doppelt überprüft und bin sogar in den IIS-Manager gegangen, um sicherzustellen, dass .DOCX-MIME-Typen geerbt wurden, und das waren sie...

Hat jemand eine Idee, warum DOCX-Dateien nicht auf den Server hochgeladen werden können, wie es bei allen anderen Dateitypen der Fall ist?

Codeschnipsel:

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."; 
    }

2voto

Martin Punkte 10901

Siehe diese Antwort , die Sie zu folgenden Seiten führt diese Seite .

DOCX Mime-Typ:

application/vnd.openxmlformats-officedocument.wordprocessingml.document

EDIT。 Entschuldigung, ich habe es nicht in der Liste gesehen. Wenn Sie DOCX zulassen wollen, warum nicht einfach nach ".docx" als Erweiterung suchen.

|| FileUpload1.PostedFile.FileName.ToLower().Substring(FileUpload1.PostedFile.FileName.Length - 4) == "docx"

1voto

Kir Punkte 2735

Sie sollten die Erweiterung lesen und nicht die Mime-Typen überprüfen. MIME-Typen werden vom Browser festgelegt und können von Computer zu Computer unterschiedlich sein. Dies ist nicht ihr Zweck.

Unabhängig davon, woher Sie kommen, sollten Sie eine wenn Wenn Sie eine solche Aussage machen, sollten Sie sich zumindest ein bisschen schämen.

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X