Frage

Ich versuche, meine Website zu erhalten, damit die Benutzer verschiedene Dateien (HttpPostedFile) hochladen, die dann in einer Oracle-Datenbank als BLOBs gespeichert sind. Hier ist, was ich bisher habe:

    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 Datei wird erfolgreich hochgeladen und heruntergeladen - jedoch ist die heruntergeladene Datei als die hochgeladene Datei nicht das gleiche. Ich habe bereits festgestellt, dass der Inhalt der gleiche wie der Datei sind sie in und aus der Datenbank geht, was bedeutet, dass die Datei entweder nicht richtig umgesetzt wird, oder nicht korrekt vom Client gespeichert wird. Die beiden Dateien sind identisch in Größe auf der Festplatte, aber nicht nach Windows an. Es scheint, dass die heruntergeladene Kopie der Datei fehlt 3 Bytes im Anfang der Datei, nach Hex-Editor.

Hier ist, was ich bin mit der Datei an den Client zu übertragen:         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);

Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Eine Menge Beispielcode I Online-Staaten sehen

br.BaseStream.Position = 0;

vor dem Lesen; Ich sehe nicht, warum, aber es ist möglich, dass Sie die Startposition explizit festlegen müssen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top