Domanda

Sto cercando di ottenere il mio sito web per consentire agli utenti di caricare vari file (HttpPostedFile), che vengono poi memorizzati in un database Oracle come BLOB. Ecco quello che ho finora:

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

Il file viene caricato correttamente e scaricato - tuttavia, il file scaricato non è lo stesso del file caricato. Ho già verificato che i contenuti sono gli stessi del file va dentro e fuori il database, il che significa che il file è o non essere convertito correttamente, o non viene salvato correttamente da parte del cliente. I due file sono identiche nelle dimensioni sul disco, ma non secondo a Windows. Sembra che la copia scaricata del file manca 3 byte in fin dall'inizio del file, secondo editor esadecimale.

Ecco quello che sto usando per trasferire il file al client:         Response.Clear ();         Response.AddHeader ( "Content-Disposition", "attachment; filename =" + fileinfo [1]);
        Response.AddHeader ( "Content-Length", filedata.Length.ToString ());
        Response.ContentType = "application / octet-stream";         Response.BinaryWrite (filedata);

Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Un sacco di codice di esempio che sto vedendo stati in linea

br.BaseStream.Position = 0;

prima di leggere; Non vedo perché, ma è possibile che è necessario impostare in modo esplicito la posizione iniziale?

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