2016-08-05 8 views
0

Ich verwende "File Upload" -Steuerung und C# -Codierung (Backend) zum Hochladen von Dateien (.jpeg/.png/.pdf) in meiner Webanwendung. Die über dieses Steuerelement hochgeladenen Dateien sollten auf dem Server gespeichert werden. Alles funktioniert gut, aber das Problem, mit dem ich konfrontiert bin, ist, wenn ein Dateityp von xlsx oder doc gespeichert ist und die Erweiterung dieser Datei in .png oder .jpeg geändert wird und hochgeladen wird, ohne dass sie auf den Server hochgeladen wird Error.Abfrage bezüglich Datei-Upload

Während ich versuche, diese Bild- oder PDF-Datei im Server zu öffnen, wird normalerweise die Fehlermeldung angezeigt, dass die Datei nicht geöffnet werden kann.

Ich habe eine Extension-Validierung durchgeführt, aber es zeigt in diesem Fall keine Wirkung.

Kann mir jemand helfen, dieses Problem loszuwerden. (Entweder C# Codierung oder Jquery oder Javascript tun wird)

+0

Bitte hinzufügen möchten herausfiltern zu helfen, die Sie –

+0

versucht haben http://stackoverflow.com/questions/36910291/node-js -How-to-Get-Datei-Signatur-Header-anstelle-von-Mime-Typ ... http://php.net/manual/en/function.exif-imagetype.php ... und so weiter .. Nur um eine Idee zu bekommen. –

Antwort

0

Hier ist, wie endlich in der Lage, die Validierung zu bekommen, wie ich brauche, mit „Header-Codes“:

System.IO.BinaryReader r = new System.IO.BinaryReader(FileUpload1.PostedFile.InputStream); 
           string fileclass = ""; 
           byte buffer; 
           try 
           { 
            buffer = r.ReadByte(); 
            fileclass = buffer.ToString(); 
            buffer = r.ReadByte(); 
            fileclass += buffer.ToString(); 
           } 
           catch 
           { 
           } 
           r.Close(); 
           if (fileclass != "3780" || fileclass != "255216" || fileclass != "13780") /*Header codes (3780-PDF);(255216-JPG,JPEG);(13780-PNG)*/ 
            { 
            /*Your code goes here(things to do with the file uploaded)*/ 
            } 

für Werte für andere Dateiformate immer versuchen, das Hochladen der Datei und legen Bruchstelle und die Header-Code erhalten.

0

bearbeiten, aktualisiert

Aber mein Problem ist die Erweiterung ist eine richtige ist die ich muss hochladen, aber der Dateityp ist meine ich nicht eine Excel-Tabelle mit Erweiterung jpeg

Sie können FileReader verwenden, gespeichert werden .readAsBinaryString() um nach Dateiköpfen zu suchen; z. B. JFIF für .jpeg, .jpg; PNG für .png; PDF für .pdf; RegExp.prototype.test() mit RegExp/JFIF|PNG|PDF/


Verwenden accept Attribut bei <input type="file"> Elementen mit dem Wert zu setzen ".jpeg,.jpg, .png,.pdf" Dateien mit Erweiterungen auszuschließen außer .jpeg, .jpg, .png.pdf oder von der Möglichkeit, vom Benutzer bei Choose File Dialog ausgewählt werden.

document.querySelector("input[type=file]") 
 
    .addEventListener("change", function(e) { 
 
    console.log(e.target.files[0].type); 
 
    var reader = new FileReader(); 
 
    reader.onload = function(event) { 
 
     console.log(event.target.result 
 
        , /JFIF|PNG|PDF/.test(event.target.result)) 
 
    } 
 
    reader.readAsBinaryString(e.target.files[0]) 
 
    })
<input type="file" accept=".jpeg,.jpg,.png,.pdf" />

+1

Vielen Dank für die Antwort Ich habe es was Sprichwort Aber mein Problem ist die Erweiterung ist eine ordnungsgemäße, die ich hochladen muss, aber der Dateityp ist nicht ich meine ein Excel-Blatt kann mit der Erweiterung JPEG gespeichert werden Aber Sie kann nicht mit jedem Bildbetrachter oder Paint öffnen Die gleiche Datei wird hochgeladen, auch wenn wir diese Art der Validierung verwenden –

+0

@BhanuPrakash Sie können 'FileReader',' .readAsBinaryString' verwenden, um Dateiüberschriften zu überprüfen, siehe aktualisierten Beitrag. – guest271314

0

Können Sie uns zeigen, wie Sie Ihre Validierung aussieht?! Es gibt zwei Möglichkeiten, die Erweiterung einer Datei zu überprüfen, die Sie hochladen. Es sollte folgende aussehen:

//In your aspx file : 
<asp:FileUpload ID="FileUploadControl" runat="server"/> 
<asp:Button runat="server" id="Btn_Upload" text="Upload" onclick="Btn_Upload_Click" /> 

//In your aspx.cs file : 
// First soluce 
protected void Btn_Upload_Click(object sender, EventArgs e) 
{ 
    if (FileUploadControl.PostedFile.ContentType != "application/pdf") 
    { 
      //Not an PDF 
    } 
} 

// Second soluce : 
protected void Btn_Upload_Click(object sender, EventArgs e) 
{ 
    string extension = Path.GetExtension(FileUploadControl.PostedFile.FileName); 
    if (extension != ".pdf") 
    { 
      //Not an PDF 
    } 
} 

Natürlich auf diesem Codeb. Sie Ausnahme für JPEG/PNG hinzufügen/...

+0

Ich habe die zweite Art der Validierung verwendet. Aber das Problem hier ist die Erweiterung wird .pdf oder .jpeg nur, aber der Inhalt ist von einem anderen Typ wie Excel So ist es nicht Validierung als Erweiterung ist richtig .. –

+0

Sie müssen für die Erweiterung überprüfen, bevor Sie versuchen, die zu machen hochladen. Setzen Sie den Code hier, ich versuchte gestern und es funktioniert ... Was ist die Ausgabe der var, wenn Sie versuchen, eine Datei wie Excel hochzuladen – Tchingy

0

Es gibt viele Bildformate, wie zum Beispiel Webp Warum unterstützen sie nicht alle? Sie können sie clientseitig konvertieren, bevor Sie sie mit Canvas hochladen ...

function convertImage(image, mimetype, quality) { 
    return new Promise(function(resolve){ 
    var canvas = document.createElement('canvas') 
    canvas.width = image.width 
    canvas.height = image.height 
    canvas.getContext("2d").drawImage(image, 0, 0) 
    canvas.toBlob(resolve, mimetype, quality) 
    }) 
} 

if(input.files[0].type === 'application/pdf') { 
    // upload directly (not a image) 
} else { 
    var img = new Image 
    img.onerror = function() { /* not an image */} 
    img.onload = function() { 
    convertImage(img, 'image/png', 1).then(function(blob){ 
     // upload the converted image 
     fetch('upload', {method: 'POST', body: blob}) 
    }) 
    } 
    img.src = URL.createObjectURL(input.files[0]) 
} 

dann verwenden Sie diese, die angenommenen Dateien

einige Code
<input type="file" accept="application/pdf, image/*">