Question

Je suis en train de faire mon site Web pour permettre aux utilisateurs de télécharger différents fichiers (HttpPostedFile), qui sont ensuite stockés dans une base de données Oracle BLOB. Voici ce que j'ai à ce jour:

    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é. Je l'ai déjà vérifié que le contenu sont les mêmes que le fichier qu'il va dans et hors de la base de données, ce qui signifie que le fichier est soit pas converti correctement, ou il n'est pas enregistré correctement par le client. Les deux fichiers sont identiques en taille sur le disque, mais pas selon Windows. Il semble que la copie téléchargée du fichier est manquant 3 octets dans le 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 ( "pièce jointe; filename =" "Content-Disposition", + fileinfo [1]);
        Response.AddHeader ( "Content-Length", filedata.Length.ToString ());
        Response.ContentType = "flux octet application /";         Response.BinaryWrite (filedata);

Toute aide serait appréciée.

Était-ce utile?

La solution

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

br.BaseStream.Position = 0;

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top