Domanda

Ho del codice C # che carica immagini e file in un db. Attualmente ho pensato che funzionasse per tutti i documenti che rientrano in un elenco di mimetipi. Tuttavia non riesce su alcuni pdf.

Ho ridotto il problema al fatto che alcuni pdf sono in formato 1.3 e altri in formato 1.4. 1.4 funziona e viene caricato correttamente, tuttavia 1.3 non viene caricato e non genera errori di runtime ma non viene semplicemente aggiunto.

Parte del codice corrente per il caricamento del pdf è

Checks for valid MIME Type
...

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

...
Continues on to Uploads to db.

Per i pdf sta cercando " application / pdf " come il tipo mime. Non credo che ci sia un altro tipo di pdf nel formato 1.3, ma forse mi sbaglio.

Qualcun altro ha mai avuto questo problema prima e qualche consiglio su come correggerlo?

È stato utile?

Soluzione 4

Sembra che sia stato solo uno stupido errore. Il file aveva un'estensione .PDF a differenza del resto con un .pdf. Mi hanno preso stupidi cappellini. Un po 'di dichiarazioni di debug extra hanno funzionato.

Altri suggerimenti

Il problema potrebbe essere come stai leggendo dal flusso di input.

Ogni volta che gestisci i flussi, dovresti leggere più volte, prendendo nota del valore di ritorno su ogni iterazione. Quindi il tuo codice originale dovrebbe essere:

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

Tuttavia, potrebbe non essere questo il problema. Mi aspetto che ciò comporti dati troncati, non una completa assenza di dati. Quando lo dici " non riesce ad essere aggiunto " Potresti essere più specifico? Quanta registrazione hai inserito? Dov'è il codice che inserisce effettivamente i dati nel database? Che tipo di mime mostrano i tuoi registri per i casi in cui fallisce?

Mi sembra che la registrazione extra farebbe probabilmente una enorme differenza qui ... attualmente o non sai dove sta andando storto, o semplicemente non ci hai detto. La registrazione dovrebbe renderlo abbastanza chiaro.

Sono d'accordo con la risposta di Jon Skeet a questa domanda. La differenza è probabilmente perché Adobe ha aggiunto una manciata di nuove tecniche di compressione a PDF 1.4, quindi i tuoi PDF 1.4 potrebbero essere significativamente più piccoli dei 1.3 PDF. Pertanto, la necessità di leggere in un ciclo può manifestarsi solo per PDF v1.3 di conseguenza. (ma è solo una supposizione)

Forse non è la versione del pdf. Adobe non ha introdotto pdf linearizzati in 1.4?

I dati sono immediatamente disponibili con la "visualizzazione web veloce" pdf e dati non sono disponibili fino al termine del caricamento con un pdf standard. Se si tenta di scrivere sul db prima del termine del trasferimento, potrebbe funzionare con un pdf linearizzato e non con uno standard.

Ad ogni modo, Jon Skeet ha ragione. Registrazione o punti di interruzione posizionati correttamente ti diranno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top