Frage

Ich habe einige C # -Code, die Bilder und Dateien in eine db laden wird. Zur Zeit dachte ich, es für alle Dokumente arbeitet, die eine Liste von MIME-Typen passen. Allerdings scheitert es bei einigen PDF-Dateien.

Ich habe das Problem auf die Tatsache, verengt, dass einige PDFs im 1.3-Format sind, und einige sind im 1.4-Format. Die 1.4 funktioniert und richtig hochgeladen, aber 1.3 nicht lädt nicht und es erzeugt keine Laufzeitfehler es nicht nur hinzugefügt werden.

Einige der aktuellen Code zum Hochladen der pdf ist

Checks for valid MIME Type
...

byte[] fileData = new byte[uploadFile.ContentLength];
uploadFile.InputStream.Read(fileData, 0, uploadFile.ContentLength);

...
Continues on to Uploads to db.

Für PDF-Dateien gesucht wird, „application / pdf“ als MIME-Typ. Ich glaube nicht, es ist eine andere Art für PDF-Dateien im 1.3-Format, aber vielleicht bin ich falsch.

Noch jemand jemals hat dieses Problem vor und einen Rat, wie man es beheben?

War es hilfreich?

Lösung 4

Es scheint, dass es nur ein dummer Fehler war. Die Datei hatte eine .PDF Erweiterung im Gegensatz zum Rest mit einem .pdf. Dumm Mützen hat mich. Ein paar zusätzliche Debug-Anweisungen hat den Trick.

Andere Tipps

Das Problem können sein, wie Sie aus dem Eingangsstrom gerade lesen.

Wenn Sie mit Streams umgehen, sollen Sie immer wieder lesen, bei jeder Iteration Kenntnis von dem Rückgabewert nehmen. So ursprünglicher Code sollte sein:

byte[] fileData = new byte[uploadFile.ContentLength];
int totalRead = 0;
while (totalRead < fileData.Length)
{
    int read = uploadFile.InputStream.Read(fileData, totalRead,
                                           fileData.Length - totalRead);
    if (read == 0)
    {
        throw new IOException("Input data was truncated");
    }
    totalRead += read;
}

Aber das kann nicht das Problem sein. Ich würde erwarten, dass in abgeschnittenen Daten zu führen, nicht ein völliges Fehlen von Daten. Wenn Sie sagen, dass es „nur hinzugefügt werden, schlägt fehl“ könnte Sie das konkretisieren? Wie viel Protokollierung Sie setzen in? Wo ist der Code, der tatsächlich die Daten in die Datenbank einfügt? Welche Mime-Typ zeigen Ihre Protokolle für die Fälle, in denen es versagt?

Es klingt für mich wie zusätzliche Protokollierung wahrscheinlich ein großen Unterschied machen würde ... zur Zeit entweder Sie nicht wissen, wo es schief geht, oder Sie haben einfach nicht sagte uns. Protokollierung sollte, dass ganz klar.

Ich stimme mit Jon Skeet Antwort auf diese Frage. Der Unterschied ist wahrscheinlich, weil Adobe eine Handvoll neuer Komprimierungstechniken zu PDF 1.4, hinzugefügt, so dass Ihre 1.4 PDFs erheblich kleiner sein könnte als die 1.3 PDFs. So wird die Notwendigkeit, in einer Schleife liest nur für v1.3 PDFs als Folge manifestieren kann. (Aber das ist nur eine Vermutung)

Vielleicht ist es nicht die Version des pdf. Haben Sie nicht Adobe eingeführt linearisierte PDF-Dateien in 1.4?

Die Daten werden ab sofort mit der „schnellen Web-Ansicht“ pdf und Daten nicht verfügbar, bis der Upload mit einem Standard-pdf beendet ist. Wenn Sie versuchen, an die DB zu schreiben, bevor die Übertragung beendet es mit einem linea pdf funktionieren könnte und nicht mit einem Standard.

So oder so, Jon Skeet ist richtig. Anmelden oder richtig platziert Haltepunkte werden Ihnen sagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top