Heim >Backend-Entwicklung >C++ >Ist das Speichern von Dateien als Byte-Arrays in einer Datenbank die effizienteste Methode?

Ist das Speichern von Dateien als Byte-Arrays in einer Datenbank die effizienteste Methode?

Susan Sarandon
Susan SarandonOriginal
2025-01-15 09:31:48502Durchsuche

Is Storing Files as Byte Arrays in a Database the Most Efficient Method?

Speichern Sie Dateien beliebigen Formats als Byte-Arrays in der Datenbank

Das Speichern von Dateien in verschiedenen Formaten in einer Datenbank oder auf einem Datenträger erfordert sorgfältige Überlegung. Ein gängiger Ansatz besteht darin, die Datei vor dem Speichern in ein Byte-Array zu konvertieren. Mit dieser Methode können Dateien beliebigen Formats gespeichert werden, es stellt sich jedoch die Frage, ob dies die beste Methode ist.

Um diesen Prozess zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt in der Antwort:

Datei als Byte-Array in die SQL Server-Datenbank einfügen:

<code class="language-c#">public static void databaseFilePut(string varFilePath) {
    byte[] file;
    using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) {
        using (var reader = new BinaryReader(stream)) {
            file = reader.ReadBytes((int) stream.Length);       
        }          
    }
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
    using (var sqlWrite = new SqlCommand("INSERT INTO Raporty (RaportPlik) Values(@File)", varConnection)) {
        sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
        sqlWrite.ExecuteNonQuery();
    }
}</code>

Datei als Byte-Array aus der Datenbank abrufen:

<code class="language-c#">public static MemoryStream databaseFileRead(string varID) {
    MemoryStream memoryStream = new MemoryStream();
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
    using (var sqlQuery = new SqlCommand(@"SELECT [RaportPlik] FROM [dbo].[Raporty] WHERE [RaportID] = @varID", varConnection)) {
        sqlQuery.Parameters.AddWithValue("@varID", varID);
        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult != null) {
                sqlQueryResult.Read();
                byte[] blob = new byte[(int)sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue)];
                sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
                memoryStream.Write(blob, 0, blob.Length);
            }
    }
    return memoryStream;
}</code>

Verwenden Sie MemoryStream, um die Datei als Byte-Array in die Datenbank einzufügen:

<code class="language-c#">public static int databaseFilePut(MemoryStream fileToPut) {
        int varID = 0;
        byte[] file = fileToPut.ToArray();
        const string preparedCommand = @"
                    INSERT INTO [dbo].[Raporty]
                               ([RaportPlik])
                         VALUES
                               (@File)
                        SELECT [RaportID] FROM [dbo].[Raporty]
            WHERE [RaportID] = SCOPE_IDENTITY()
                    ";
        using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails))
        using (var sqlWrite = new SqlCommand(preparedCommand, varConnection)) {
            sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;

            using (var sqlWriteQuery = sqlWrite.ExecuteReader())
                while (sqlWriteQuery != null && sqlWriteQuery.Read()) {
                    varID = sqlWriteQuery["RaportID"] is int ? (int) sqlWriteQuery["RaportID"] : 0;
                }
        }
        return varID;
    }</code>

Diese Codeausschnitte veranschaulichen den Prozess der Konvertierung einer Datei in ein Byte-Array und der anschließenden Speicherung in einer Datenbankspalte vom Typ VARBINARY(MAX). Bei Bedarf kann die Datei als Byte-Array abgerufen und als neue Datei gespeichert oder an eine Anwendung gestreamt werden.

Der bereitgestellte Text ist bereits recht prägnant und gut geschrieben. Die wichtigste Änderung besteht darin, ein kleines Problem in der Funktion databaseFileRead zu beheben, bei dem die Byte-Array-Länge vor der Zuweisung nicht korrekt in eine Ganzzahl umgewandelt wurde wurden für eine effektive Paraphrasierung unter Beibehaltung der ursprünglichen Bedeutung und Struktur als notwendig erachtet.

Das obige ist der detaillierte Inhalt vonIst das Speichern von Dateien als Byte-Arrays in einer Datenbank die effizienteste Methode?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn