2009-07-27 5 views
0

J'essaie d'obtenir mon site Web pour permettre aux utilisateurs de télécharger divers fichiers (HttpPostedFile), qui sont ensuite stockés dans une base de données Oracle en tant que BLOB. Voici ce que j'ai jusqu'à présent:Inconsistance dans le fichier avant et après le téléchargement dans Oracle DB

public static bool insertFile(int pid, HttpPostedFile file, string filedesc) 
    { 
     string filename = file.FileName.Remove(0, file.FileName.LastIndexOf("\\") + 1); 
     byte[] filebytearray = new byte[file.ContentLength]; 
     BinaryReader br = new BinaryReader(file.InputStream); 
     filebytearray = br.ReadBytes(file.ContentLength); 

     if (filedesc == string.Empty) 
     { 
      filedesc = "No description."; 
     } 
     OracleConnection conn = new OracleConnection(connectionString); 
     OracleCommand cmd = new OracleCommand("database", conn); 
     cmd.BindByName = true; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new OracleParameter("pfiledata", OracleDbType.Blob)).Value = filebytearray; 
     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      Errors.WriteToEventLog("File insert", ex); 
      return false; 
     } 
     finally 
     { 
      conn.Dispose(); 
      cmd.Dispose(); 
      file.InputStream.Dispose(); 
     } 
    } 

Le fichier est téléchargé avec succès et téléchargé - cependant, le fichier téléchargé est pas le même que le fichier téléchargé. J'ai déjà vérifié que le contenu est le même que celui dans lequel il est entré et sorti de la base de données, ce qui signifie que le fichier n'est pas converti correctement ou qu'il n'est pas sauvegardé correctement par le client. Les deux fichiers sont de taille identique sur le disque, mais pas selon Windows. Il semble que la copie téléchargée du fichier manque 3 octets au tout début du fichier, selon l'éditeur hexadécimal. Voici ce que j'utilise pour transférer le fichier au client: Response.Clear(); Response.AddHeader ("Content-Disposition", "pièce jointe; nomfichier =" + fichierinfo [1]);
Response.AddHeader ("Content-Length", filedata.Length.ToString());
Response.ContentType = "application/octet-stream"; Response.BinaryWrite (filedata);

Toute aide serait appréciée.

Répondre

0

beaucoup de l'exemple de code que je vois états en ligne

br.BaseStream.Position = 0; 

avant de lire; Je ne vois pas pourquoi, mais est-il possible que vous deviez définir explicitement la position de départ?

+0

Merci, cela a fonctionné. Il me semble plutôt bizarre que BinaryReader ne capture pas le flux avec l'index 0 par défaut, mais maintenant que cela fonctionne, je ne vais pas trop le remettre en question. –

Questions connexes