Pregunta

Estoy tratando de conseguir mi sitio web para permitir a los usuarios subir varios archivos (HttpPostedFile), que luego se almacenan en una base de datos Oracle como BLOB. Esto es lo que tengo hasta ahora:

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

El archivo correctamente se cargar y descargar - Sin embargo, el archivo descargado no es el mismo que el archivo subido. Ya he verificado que el contenido es el mismo que el archivo que va dentro y fuera de la base de datos, lo que significa que el archivo está o bien no se convierte correctamente, o no se guarda correctamente por el cliente. Los dos archivos son idénticos en tamaño en el disco, pero no conforme a Windows. Parece ser que la copia descargada del archivo falta 3 bytes en el principio del archivo, de acuerdo con el editor hexadecimal.

Esto es lo que estoy usando para transferir el archivo al cliente:         Response.Clear ();         Response.AddHeader ( "Content-Disposition", "unión; nombre de archivo =" + fileinfo [1]);
        Response.AddHeader ( "Content-Length", filedata.Length.ToString ());
        Response.ContentType = "application / octet-stream";         Response.BinaryWrite (filedata);

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

Una gran parte del código de ejemplo que estoy viendo estados en línea

br.BaseStream.Position = 0;

antes de leer; No veo por qué, pero es posible que usted necesita para establecer explícitamente la posición de inicio?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top