Vra

Ek probeer om my webwerf te kry om gebruikers in staat stel om verskeie lêers (HttpPostedFile), wat dan in 'n Oracle databasis as druppels is gestoor op te laai. Hier is wat ek tot dusver het:

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

Die lêer suksesvol raak gelaai en afgelaai - maar die lêer is nie dieselfde as die opgelaaide lêer. Ek het reeds bewys dat die inhoud is dieselfde as die lêer dit gaan in en uit die databasis, wat beteken dat die lêer is óf nie korrek omskep, of dit is nie korrek gered deur die kliënt. Die twee lêers is identies in grootte op die skyf, maar nie volgens Windows. Dit wil voorkom asof die afgelaai kopie van die lêer ontbreek 3 grepe in die begin van die lêer, volgens hex redakteur.

Hier is wat ek gebruik om die lêer te dra aan die kliënt:         Response.Clear ();         Response.AddHeader ( "Content-Disposition", "beslaglegging; filename =" + File Info [1]);
        Response.AddHeader ( "Content-lengte", filedata.Length.ToString ());
        Response.ContentType = "application / octet-stream";         Response.BinaryWrite (filedata);

Enige hulp sal waardeer word.

Was dit nuttig?

Oplossing

Daar is baie van die monster-kode ek sien online state

br.BaseStream.Position = 0;

voor te lees; Ek kan nie sien hoekom nie, maar is dit moontlik dat jy nodig het om uitdruklik gestel die begin posisie?

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top